这是 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 许可协议
vector<T>::size()
返回一个size_t
类型的值,这是一个无符号类型。假设传入的向量为空,因此向量的长度为 0nums.size() - 1
将导致整数下溢,您实际上将0
与一个非常大的正数进行比较。这将评估为 true 导致循环运行并且i
将通过数组边界。要解决此问题,您可以将
nums.size()
为int
或将大小存储在整数变量中并与之进行比较。