返回

不断精进,从 LeetCode 刷题中斩获技术成长

前端

LeetCode 刷题:技术成长的助推器

在编程领域,LeetCode 已然成为磨练算法和数据结构技能的必经之路。通过解决一系列精心设计的算法和数据结构问题,程序员可以不断挑战自我,提升解决问题的能力,夯实技术基础。然而,LeetCode 刷题并非易事,它需要坚持不懈的毅力和科学的学习方法。

Day003:第 26 题“删除有序数组中的重复项”

第 26 题“删除有序数组中的重复项”是一道经典的 LeetCode 问题,旨在考察程序员对数组操作、指针技巧和时间复杂度分析的理解。

题目给定一个有序数组 nums,请原地删除重复项,使得每个元素只出现一次,并返回新的数组长度。

解题思路:双指针法

解决此题的关键在于巧用双指针法。我们使用两个指针 ij 分别表示原数组和新数组中的位置。初始时,ij 均指向数组的第一个元素。然后,我们遍历数组,如果 nums[i]nums[i+1] 相等,则说明遇到了重复元素,我们跳过 nums[i+1],继续向后遍历。如果 nums[i]nums[i+1] 不相等,则说明遇到了新的元素,此时我们将 nums[i+1] 复制到 nums[j],并将 j 向后移动一位。以此类推,直到遍历完整个数组。

代码实现:

def removeDuplicates(nums):
    n = len(nums)
    if n == 0:
        return 0

    i = 0
    j = 1
    while j < n:
        if nums[i] == nums[j]:
            j += 1
        else:
            i += 1
            nums[i] = nums[j]
            j += 1

    return i + 1

时间复杂度和空间复杂度

此算法的时间复杂度为 O(n),其中 n 为数组的长度。我们遍历数组一次,因此时间复杂度为 O(n)。该算法原地操作数组,不需要额外的空间,因此空间复杂度为 O(1)。

刷题原则和注意事项

  • 坚持不懈,循序渐进: 刷题是一个长期积累的过程,贵在坚持不懈。从简单题入手,循序渐进地挑战更高难度的题目,不断拓展知识面和技能边界。
  • 理解解题思路,重在思考: 不要满足于死记硬背题目解法,而是要深入理解解题思路,掌握其背后的算法和数据结构原理,锻炼逻辑思维能力。
  • 注重代码质量,优化性能: 在保证正确性的基础上,注重代码的可读性和效率,不断优化算法和数据结构的使用,提升代码质量。
  • 总结反思,提升认知: 完成题目后,及时总结反思,梳理解题思路、优化策略和知识点,形成自己的知识体系,不断提升技术认知。
  • 交流学习,取长补短: 积极参与技术论坛和社区,与其他 LeetCode 爱好者交流学习,取长补短,拓宽思路。

结语

LeetCode 刷题是一场技术成长的修行。通过不断精进,汲取题目中的智慧结晶,我们可以有效提升算法和数据结构技能,夯实技术基础,为技术进阶之路奠定坚实的基础。让我们共同踏上 LeetCode 的征程,在每一次刷题中挑战自我,超越自我,收获技术成长的果实!