leetcode:删除有序数组中的重复项II

在这里插入图片描述
在这里插入图片描述
这两道题我感觉精髓在于
你要牢记一点
慢指针之前包括当前永远是排好的值
快指针是用来探路的
这其实就是快慢指针的精髓
还有就是你不要想复杂了
快慢指针能有多复杂?就两个指针移而已
通过计数变量来确定是否等于2
之后这个计数变量还要初始化
即可
和I一样的,就是在I的代码上增加一个变量,这个变量用于计数是否到了2
I的代码

class Solution {
    public int removeDuplicates(int[] nums) {
        int slow = 0;
        int fast = 0;
        while(nums.length==0){
            return 0;
        }
        while(fast<nums.length){
            if(nums[slow]!=nums[fast]){
                slow = slow + 1;
                nums[slow] = nums[fast];
            }
            fast = fast + 1;
        }
        return slow+1;
    }
}

II的代码

class Solution {
    public int removeDuplicates(int[] nums) {
        int slow = 0, fast = 0;
        int count = 0;

        while(fast < nums.length) {
            if(nums[fast] == nums[slow]) {
                count++;
                if(count == 2) {
                    slow = slow + 1;
                    nums[slow] = nums[fast];
                }
                fast++;
            }
            else{
                slow = slow + 1;
                nums[slow] = nums[fast];
                fast = fast + 1;
                count = 1;
            }
        }

        return slow + 1;
    }
}