WEI-CHENG CHEN

解法 01:保留一位

就用快慢指針

class Solution {
public:
    int removeDuplicates(vector<int>& nums) {
        int left = 0;
        for(int right=1;right<nums.size();right++){
            if(nums[right]!=nums[left]){
                left++; // 我是要先往後一個,而不是覆蓋掉nums[left]本身
                nums[left]=nums[right];
            }
        }
        return left+1;
    }
};

解法 02:保留 k 位

可以根據解法 01 進行優化:保留 1 位 => 保留 k 位

class Solution {
public:
    int removeDuplicates(vector<int>& nums) {
        return f(nums, 1); // 保留一位
    }

    int f(vector<int>& nums, int k){
        if (nums.size() <= k) return nums.size();
        int left = k - 1;
        for(int right=k;right<nums.size();right++){
            if(nums[right]!=nums[left-k+1]){
                left++;
                nums[left]=nums[right];
            }
        }
        return left+1;
    }
};