问题描述:
Given an array containing n distinct numbers taken from 0, 1, 2, ..., n
, find the one that is missing from the array.
示例:
Given nums = [0, 1, 3]
return 2
.
问题分析:
1.根据等差数列的求和公式s = (1+n)*n / 2可求得n以内的和,减去数组元素之和,即可得到要求的元素。
2.也可以根据异或运算,将待求结果res = 0从1一直异或到n,与此同时也与数组各个元素异或,最后得到的res就是待求的解。
过程详见代码:
1.求和解决
class Solution {
public:
int missingNumber(vector<int>& nums) {
int sum = 0;
int n = nums.size();
for(int i = 0 ;i < n; i++)
{
sum += nums[i];
}
return ((1 + n) * n) / 2 - sum;
}
};
2.异或运算解决
class Solution {
public:
int missingNumber(vector<int>& nums) {
int result = nums.size();
int i=0;
for(int num:nums){
result ^= num;
result ^= i;
i++;
}
return result;
}
};