0%

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

双指针

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

时间复杂度$O(n)$

空间复杂度$O(1)$

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;
}
}