按照前面的思路,很容易想到这个做法,不过这个做法不太优雅。
class Solution {
public:
int removeDuplicates(vector<int>& nums) {
int n = nums.size();
if(n <= 2){
return n;
}
int i, j;
for(i = 1, j = 2; j < n; j++){
if(nums[j] != nums[i] || nums[j] != nums[i - 1]){
nums[++i] = nums[j];
}
}
return i + 1;
}
};
优雅判断两个相等的方法
nums[j] > nums[i-2], 这里i是生成数组的长度,i-1是最后一个数,i-2是倒数第二个数,由于nums[i] > nums[i-2],那么这个数和倒数第二个数一定不相同。
class Solution {
public:
int removeDuplicates(vector<int>& nums) {
int n = nums.size();
if(n <= 2){
return n;
}
int i, j;
for(i = 0, j = 0; j < n; j++){
if(j < 2 || nums[j] > nums[i - 2]) nums[i++] = nums[j];
}
return i;
}
};