268. 丢失的数字(简单)
思路
- 其实这道题和
136.只出现一次的数字
类似。我们可以将 nums 的所有数字和[0, n]
组合,丢失的数字只会在[0,n]
出现一次,其余数字都会出现两次,我们将它们两两异或,由于相同的数字异或的结果为 0 ,所以最终的结果就是丢失数字。 - 注意,由于 nums 的长度为 n-1,而我们需要遍历
[0,n]
的数字,长度为 n ,所以最后还需要和 n 单独异或一次。 - 该算法的时间复杂度为 O(n) ,空间复杂度为常数空间,已经满足进阶要求。
代码
class Solution {
public:
int missingNumber(vector<int>& nums) {
int ans = 0;
int n = nums.size();
for(int i=0; i<n; i++){
ans ^= nums[i] ^ i;
}
ans ^= n;
return ans;
}
};