二、 删除有序数组中的重复项 II
1.双指针
我们在遍历整个数组的时候如果发现某个元素出现的次数超过了两次,就先记录下它出现的第三个位置,然后找到下一个与它不同的元素,从这个元素开始将其和其后面的所有元素都复制到之前记录的位置之后,在遍历完成之后就完成了删除重复的操作,具体代码如下:
class Solution {
public int removeDuplicates(int[] nums) {
int len = nums.length;
if(len < 3) {
return len;
}
for(int i = 0; i < len; i++) {
int num = nums[i];
int count = 1;
i++;
while(i < len && nums[i] == num) {
count++;
i++;
}
if(count > 2) {
int k = i - count + 2;
int p = i;
i = k;
while(p < nums.length) {
nums[k] = nums[p];
k++;
p++;
}
len -= (count - 2);
i--;
} else {
i--;
}
}
return len;
}
}
复杂度分析
- 时间复杂度:O(n^2)。
- 空间复杂度:O(1)。