给你一个有序数组 nums ,请你 原地 删除重复出现的元素,使得出现次数超过两次的元素只出现两次 ,返回删除后数组的新长度。

不要使用额外的数组空间,你必须在 原地 修改输入数组 并在使用 O(1) 额外空间的条件下完成。

思路

  1. 双指针,遍历数组的同时维护「目标数组」的当前下标
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
var removeDuplicates = function (nums) {
let curIndex = 1
let [prevVal, matchTwice] = [nums[0], false]
for (let i = 1; i < nums.length; ++i) {
if (nums[i] === prevVal && matchTwice) {
continue
}
matchTwice = nums[i] === prevVal
prevVal = nums[i]
;[nums[curIndex], nums[i]] = [nums[i], nums[curIndex]]
++curIndex
}
nums.length = curIndex
return curIndex
}