从leetcode中删除Sorted Array中的重复项,为什么它的错误答案?

时间:2015-09-03 22:51:38

标签: c++

这是从leetcode中删除Sorted Array中的重复项    正确的答案是

   class Solution {
public:
    /**
     * @param A: a list of integers
     * @return : return an integer
     */
    int removeDuplicates(vector<int> &nums) {
        // write your code here
        int i=1;
        while(i<nums.size()){
            if(nums[i] != nums[i-1])
                ++i;
            else
                nums.erase(nums.begin()+i);
        }
        return nums.size();
    }
};

我改变了这些代码

class Solution {
public:
    int removeDuplicates(vector<int>& nums) {
        int i = 1;
        while( i < nums.size()) {
            if( nums[i] != nums[i+1])
            i++;
            else
            nums.erase(nums.begin() + i);
        }
        return nums.size();
    }
};

我不知道为什么这是错的,输入:[1,1]输出:[1,1]预期:[1]

并且像这样:

class Solution {
public:
    int removeDuplicates(vector<int>& nums) {
        for(int i = 1; i < nums.size(); i++) {
            if( nums[i-1] = nums[i])
            nums.erase(nums.begin() + i);
        }
        return nums.size();
    }
};

输入: [1,2] 输出: [2] 预期: [1,2]

1 个答案:

答案 0 :(得分:0)

访问向量是从零开始的(就像内置的低级数组一样),因此将i的初始值设置为零(而不是1)。在专业代码中,我希望通过对矢量使用标准排序和独特算法来完成。