就用快慢指針
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;
}
};
可以根據解法 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;
}
};