删除排序数组中的重复项 II

删除排序数组中的重复项 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;
    }
}