#80 删除有序数组中的重复项 II(数组)
80. 删除有序数组中的重复项 II - 力扣(LeetCode)
注意vector容器同其他容器一样,.size()动态维护,使用erase+for循环时会出现“跨越”的问题,这点在动态维护的容器编程中很容易犯错。
给出本题类似数组的处理方法,注意i--和actsize--的使用。
void erase(vector<int> &nums,int pos,int *actsize){
for(int i=pos;i<(*actsize)-1;i++)
nums[i]=nums[i+1];
(*actsize)--;
}
int removeDuplicates(vector<int>& nums) {
int actsize=nums.size();
int times=1;
for(int i=1;i<actsize;i++){
if(nums[i]==nums[i-1]){
times++;
if(times>=3){
erase(nums,i,&actsize);
times--;
i--;
}
}
else{
times=1;
}
}
return actsize;
}