思路: two pointer。因为这题和26题是一个系列的,26题昨天我做过了,所以这题自然而然想到two pointer。这边还是一个指针(i)指向需要填写的位置,另一个指针(j)遍历数组。下面直接展示代码,还是不难的,跟着代码走一遍就理解了。
class Solution {
public int removeDuplicates(int[] nums) {
int len = nums.length;
int dupSoFar = 0;
int dupNeedRemoved = 0;
for(int i = 0, j = 1; j < len; j++){
if(nums[i] == nums[j]){
dupSoFar++;
if(dupSoFar > 1){
dupNeedRemoved++;
continue;
}
nums[i + 1] = nums[j];
i++;
}else{
nums[i + 1] = nums[j];
i++;
dupSoFar = 0;
}
}
return len - dupNeedRemoved;
}
}
总结:
- array中遇到重复元素的问题都可以尝试用two pointer解决。