题目描述
给定一个包含 0, 1, 2, ..., n
中 n 个数的序列,找出 0 .. n 中没有出现在序列中的那个数。
示例 1:
输入: [3,0,1] 输出: 2
示例 2:
输入: [9,6,4,2,3,5,7,0,1] 输出: 8
说明:
你的算法应具有线性时间复杂度。你能否仅使用额外常数空间来实现?
问题分析
此题用位运算来做。将数组nums的所有数异或起来,然后结果再异或上0~n这n+1个数。由于异或运算具有交换律并且相同的数异或结果为0,并且任何数异或上0都等于它本身,所以得到的结果一定是缺失的数。
代码实现
class Solution {
public:
int missingNumber(vector<int>& nums) {
int ans = 0;
for(int i = 0; i < nums.size(); i++)
ans ^= nums[i];
for(int i = 0; i < nums.size() + 1; i++)
ans ^= i;
return ans;
}
};