#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;
    }