LintCode【简单】101. 删除排序数组中的重复数字 II。代码及思路

题目要求:

跟进“删除重复数字”:

如果可以允许出现两次重复将如何处理?

思路:

之前忘记上一道题的题目要求了……其实给的是一个排序的数组,所以可以通过减少循环次数缩小时间复杂度,具体见代码。

代码:

class Solution {
public:
    /**
     * @param A: a list of integers
     * @return : return an integer
     */
    int removeDuplicates(vector<int> &nums) {
        // write your code here
        int i, j, count;
        for(i = 0; i < nums.size(); i++){
            count = 0;
            for(j = i; j < nums.size() && nums[j] == nums[i]; j++){
                count++;
                if(count > 2){
                    nums.erase(nums.begin() + j);
                    j--;//j--是因为删除了一个j位置的节点,所以还是要从j位置继续循环。
                }
            }
            i = j - 1;//如果不给j-1就赋给i,下一次循环i++,如果是最后一个就会直接退出外层循环了。
        }
        return nums.size();
    }
};

猜你喜欢

转载自blog.csdn.net/limonsea/article/details/79321751