[LeetCode]268. Missing Number
题目描述
思路
因为只有0-n的数在数组中,所以只要对数组每一位指向的数字加标识即可
这里做的标识为取相反数,需要考虑0的情况
代码
#include <iostream>
#include <vector>
using namespace std;
class Solution {
public:
int missingNumber(vector<int>& nums) {
int zeroIndex = -1;
for (int i = 0; i < nums.size(); ++i) {
//数组中数字为数组长度时,越界,跳过
if (abs(nums[i]) == nums.size())
continue;
//数组中数字对应为0时,需要额外标识
else if (nums[abs(nums[i])] == 0)
zeroIndex = abs(nums[i]);
//取相反数标识
else
nums[abs(nums[i])] = nums[abs(nums[i])] < 0 ? nums[abs(nums[i])] : -nums[abs(nums[i])];
}
for (int i = 0; i < nums.size(); ++i) {
//标识后,对应数字为正数,或者数字为0,零标识未改变的,返回当前数字下标
if (nums[i] > 0 || (nums[i] == 0 && zeroIndex == -1))
return i;
}
//若数组中数字都小于0,且0标识也被改变,那么缺失的数只有最大的
return nums.size();
}
};
int main() {
vector<int> nums = { 2, 0, 1 };
Solution s;
cout << s.missingNumber(nums) << endl;
system("pause");
return 0;
}