算法学习第10天LeetCode 26 删除有序数组中的重复项一、今日任务- 算法题LeetCode 26. 删除有序数组中的重复项- 核心目标巩固双指针完成第二周学习小结二、题目回顾给一个非严格递增有序数组 nums 原地去重每个元素只留一次保持相对顺序返回去重后长度 k 数组前 k 位为去重结果后面可忽略 。示例- 输入 [0,0,1,1,1,2,2,3,3,4]- 输出 5 数组前5位 [0,1,2,3,4]三、解题思路快慢双指针最优解核心思想- 慢指针 slow指向已去重序列的最后一位- 快指针 fast遍历数组寻找新的不重复元素- 有序数组 → 重复元素一定相邻只需比较 nums[fast] 与 nums[slow]步骤1. 空数组直接返回 02. slow 初始为 0 fast 从 1 开始遍历3. 发现 nums[fast] ! nums[slow] - slow- nums[slow] nums[fast]4. 遍历结束返回 slow 1 索引转长度四、代码实现JavaScriptjavascriptvar removeDuplicates function(nums) {if (nums.length 0) return 0;let slow 0;for (let fast 1; fast nums.length; fast) {if (nums[fast] ! nums[slow]) {slow;nums[slow] nums[fast];}}return slow 1;};复杂度- 时间O(n)一次遍历- 空间O(1)原地修改无额外数组五、易错点总结1. 忘记空数组边界2. 返回 slow 而非 slow1 索引≠长度3. 用额外数组存结果违反原地要求4. 忽略有序前提无序数组不能直接用此方法