题目链接:https://leetcode.com/problems/missing-number/
Given an array containing n distinct numbers taken from 0, 1, 2, ..., n
,
find the one that is missing from the array.
For example,
Given nums = [0, 1, 3]
return 2
.
Note:
Your algorithm should run in linear runtime complexity. Could you implement it using only constant extra space complexity?
思路:用一个前n项和公式减去数组的和即可得出答案
代码如下:
class Solution {
public:
int missingNumber(vector<int>& nums) {
int len = nums.size(), sum = len*(len+1)/2;
for(auto val: nums) sum -= val;
return sum;
}
};
另外还有一种位运算的方法,利用异或操作,全部异或完数字0-n和nums[0, len-1]之后剩余的数字就是我们要求的结果。也是一个很漂亮的解法
代码如下:
class Solution {
public:
int missingNumber(vector<int>& nums) {
int result = 0, len = nums.size();
for(int i = 0; i< len; i++)
result ^= (i ^ nums[i]);
return result ^ len;
}
};
第二种方法参考:http://www.neozone.me/leetcode268.html