数组nums
包含从0
到n
的所有整数,但其中缺了一个。请编写代码找出那个缺失的整数。你有办法在O(n)时间内完成吗?
解法一:
class Solution {
public int missingNumber(int[] nums) {
int n = nums.length;
int ans = n * (n+1)/2;
for(int i=0;i<n;i++)
ans -= nums[i];
return ans;
}
}
这种为数学方法,存在的问题是数组过大时,乘积可能会溢出。
解法二:
class Solution{
int missingNumber(vector<int>& nums)
{
int sum = 0;
for (int i = 0; i < nums.size(); i++)
{
sum ^= i;
sum ^= nums[i];
}
sum ^= nums.size();
return sum;
}
}
推荐这种方法,利用的是位运算a^a=0这条性质。