0%

80. 删除有序数组的重复项Ⅱ

双指针

把新数组想象成一个栈,用一个指针维护栈顶位置

数组有序,要求每个元素最多保留两次。用 left 指向新数组的写入位置,比较 nums[right] 与 nums[left - 2],不同则写入,保证不会出现第三次重复。

时间复杂度

空间复杂度

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
class Solution {
public int removeDuplicates(int[] nums) {
int n = nums.length;
if (n <= 2) {
return n;
}
int left = 2, right = 2;
while (right < n) {
if (nums[right] != nums[left - 2]) { // left 始终指向新数组的第一个可用位置
nums[left] = nums[right];
left++;
}
right++;
}
return left;
}
}