快慢指针
解题思路
-
数组是有序的,那么重复的元素一定会相邻;
- 比较 right 和 left - 2 位置的元素是否相等;
- 相等 right 后移 1 位;
- 不相等则将 right 位置的元素复制到 left 位置上,right 后移一位,left 后移一位;
-
重复上述过程,直到 right 等于数组长度;返回 left 即为新数组长度;
复杂度
-
时间复杂度:
O(n)
-
空间复杂度:
O(1)
代码实现
function removeDuplicates(nums) {
let K_TIME = 2; // 出现两次的元素,可通用成 k 次
if (nums.length <= K_TIME) return nums.length;
let left = K_TIME;
let right = K_TIME;
while (right < nums.length) {
if (nums[left - K_TIME] != nums[right]) {
nums[left++] = nums[right];
}
right++
}
return left;
}
leetcode🧑💻 26. 删除有序数组中的重复项
上一篇