问题描述
数组nums包含从0到n的所有整数,但其中缺了一个。请编写代码找出那个缺失的整数。你有办法在O(n)时间内完成吗?
解题报告
-
数学解法
1 + 2 + ⋯ + n 1+2+\cdots +n 1+2+⋯+n 的和减去数组的加和,即为所求。 -
异或解法
在原数组的基础上,加上 1 , 2 , ⋯ , n 1,2,\cdots, n 1,2,⋯,n,除了缺失的那个数只出现一次,其他数出现了2次。
实现代码
class Solution {
public:
int missingNumber(vector<int>& nums) {
// int sum=0;
// for(int i=0;i<nums.size();i++) sum+=nums[i];
// return (nums.size()+1)*nums.size()/2-sum;
int ans=0;
for(int i=1;i<=nums.size();i++) ans^=i;
for(int i=0;i<nums.size();i++) ans^=nums[i];
return ans;
}
};