给出一个包含从0、1、2,...,n中提取的n个不同数字的数组,找到该数组中缺少的那个。
示例1:
输入:[3,0,1]
输出:2
我的方法是读取每个元素,然后将该索引乘以-1。哪个数组索引保持正数就是缺少的那个(我必须分别处理零)
我的代码在我试图将元素乘以-1的行上导致堆溢出
class Solution {
public:
int missingNumber(vector<int>& nums) {
bool zeroFound = false;
for(auto i = nums.begin(); i < nums.end(); i++) {
if(*i == 0) {
zeroFound = true;
} else {
int value = *i;
printf("Inner %d %d\n", value, nums[value -1]);
//nums[value - 1] = value * (-1);
}
}
if(!zeroFound) {
return 0;
} else {
int count = 1;
for(auto i = nums.begin(); i < nums.end(); i++, count++) {
if(*i > 0) {
return count;
}
}
}
return -1;
}
};
答案 0 :(得分:1)
学习使用调试器。
您的问题是,在第一次运行循环之后,输入为[3, 0, -3]
。当您处理最后一个元素时,您尝试访问元素-4,但它永远不会结束。
即使您使用元素的绝对值,您的第一次运行也将覆盖最后一个元素-因此,您将无法再确定输入是[3, 0, 1]
还是[3, 0, 2]
。