Day6-删除有序数组中的重复项

YVTU

🔗 LeetCode 26 - Remove Duplicates from Sorted Array

📌 题目描述

给你一个 升序排列 的数组 nums,请你原地删除重复出现的元素,使每个元素只出现一次,返回删除后数组的新长度。不要使用额外的数组空间,你必须在 O(1) 额外空间的条件下原地修改输入数组。

示例:

1
2
输入: nums = [1,1,2]
输出: 2, nums = [1,2,_]

💡 解题思路

  • 使用 双指针

    • slow 指针表示当前处理的唯一元素下标;
    • fast 指针遍历数组,当遇到一个与 nums[slow] 不同的元素时,将其赋值给 nums[slow + 1],然后 slow 前进一步。
  • 遍历结束后,slow + 1 就是新数组的长度。

  • 时间复杂度:O(n)

  • 空间复杂度:O(1)


✅ JavaScript 实现

1
2
3
4
5
6
7
8
9
10
11
12
13
14
var 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;
};

🧠 思考拓展

  • 如果要求每个元素最多出现两次怎么办?(参考 LeetCode 80)
  • 这道题为什么必须是原地修改?有什么实际应用场景?

On this page
Day6-删除有序数组中的重复项