删除排序数组中的重复项 II
思路:设置快慢指针k(慢),i(快)和一个计数器,判断相邻的两个数字是否相等,如果相等,则计数器加一,并且判断计数器的值是否超过2,没有超过的话k向后移动一位;如果相邻的两个数字不相等,那么将k向后移动一位,然后将num[i]中的值赋值给nums[k]。
关键:k用来保证每个元素最多出现两次。不想等的时候分为两种情况:
- 计数器的值小于2,说明nums[k]的下一个元素就是nums[i]
- 计数器的值大于2,说明nums[k]与nums[i]相隔count-2个位置,需要做的就是将nums[i]的值赋值给nums[k]的后一位。
使用nums[++k] = nums[i]来满足上述两种情况,然后再让计数器的值归零。
class Solution {
public int removeDuplicates(int[] nums) {
if (nums.length < 2){
return nums.length;
}
int k = 0,count = 0;
for (int i = 1; i < nums.length; i++){
if (nums[i] == nums[k]){
count++;
if (count < 2){
nums[++k] = nums[i];
}
}else {
nums[++k] = nums[i];
count=0;
}
}
return k+1;
}
}