lt.40- 删除有序数组中的重复项 II
[案例需求]
[思路分析]
[待补充]
[代码实现]
class Solution {
public int removeDuplicates(int[] nums) {
//有序数组 + 原地交换==> 双指针==> 快慢针
//左指针指向不重复, 或只重复一次的一组数的末尾;
//如何判断只重复一次?
// l-1 = l = r, 说明 重复两次以了
//右指针遍历整个数组
int L = 1;
int R = L + 1;
while(R < nums.length){
//重复两次以上
if(nums[L - 1] == nums[L] && nums[L] == nums[R]){
R++;
}else{
L++;
int temp = nums[L];
nums[L] = nums[R];
nums[R] = temp;
R++;
}
}
return L+1;
}
}
小优化
- 这里小技巧在于 把慢指针-2 之后跟快指针比较
然后如果相等的话就代表有三个连续的 然后继续让快指针走知道遇见不等的
再让他的值赋值到慢指针的 位置。- 这样的话接近于 100% 100% 了, 挺不错.
class Solution {
public int removeDuplicates(int[] nums) {
if (nums.length==2) return 2;
int i=2,j=2;
while(j<nums.length){
if(nums[i-2]!=nums[j]){
nums[i]=nums[j];
i++;
}
++j;
}
return i;
}
}