删除有序数组中的重复项Ⅱ
题目:删除有序数组中的重复性Ⅱ
给你一个有序数组nums,请你原地删除重复出现的元素,使得出现次数超过两次的元素只出现两次 ,返回删除后数组的新长度。
不要使用额外的数组空间,你必须在原地修改输入数组 并在使用O(1)额外空间的条件下完成。
借助辅助游标i和j,初始化游标i=0,j=1。判断nums[j]是否等于nums[i],如果相等游标j++,不相等则判断j和i之间是否相关超过两个,超过则数组原地删除多余元素重置游标值i=i+2,j=i+1,不超过则不做处理只需重置游标值i=j,j=i+1即可。
需要注意的是,我们要特殊处理当j超出数组长度时有超过两个的情况,代码如下:
var removeDuplicates = function(nums) {
let i = 0, j = 1
while(j < nums.length) {
if (nums[i] == nums[j]) {
j ++
// 特殊处理结束位置相同元素情况
if (j >= nums.length && j - i > 2) {
nums.splice(i, j - i - 2)
}
} else {
// 元素超过两个时处理
if (j - i > 2) {
nums.splice(i, j - i - 2)
i = i + 2
} else {
i = j
}
j = i + 1
}
}
return nums.length
};
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
上次更新: 2025/09/05, 8:09:00