对“value_type”类型的空指针的引用绑定

新手上路,请多包涵

这是 leetcode 26。给定一个排序数组,就地删除重复项,使每个元素只出现一次并返回新的长度。给出了一个示例 nums = [1,1,2] ,该函数应返回 [1,2]

下面是我的代码。我删除了所有其他重复项,只留下其中一个。但是,我在提交时总是收到 reference binding to null pointer of type 'value_type' 的错误。如果有人可以帮助我,我将不胜感激!

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

原文由 uvzoeeeey 发布,翻译遵循 CC BY-SA 4.0 许可协议

阅读 412
2 个回答

vector<T>::size() 返回一个 size_t 类型的值,这是一个无符号类型。假设传入的向量为空,因此向量的长度为 0 nums.size() - 1 将导致整数下溢,您实际上将 0 与一个非常大的正数进行比较。这将评估为 true 导致循环运行并且 i 将通过数组边界。

要解决此问题,您可以将 nums.size()int 或将大小存储在整数变量中并与之进行比较。

原文由 David G 发布,翻译遵循 CC BY-SA 3.0 许可协议

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

原文由 ansar 发布,翻译遵循 CC BY-SA 4.0 许可协议

撰写回答
你尚未登录,登录后可以
  • 和开发者交流问题的细节
  • 关注并接收问题和回答的更新提醒
  • 参与内容的编辑和改进,让解决方法与时俱进
推荐问题