题目解析
268. 丢失的数字
本题的意思就是数组的长度为n,在[0,n]区间中寻找缺失的一个数字
算法讲解
直观思路:排序 + Hash,顺序查找缺失的数字
优化:使用异或,首先将[0,n]之间所有数字异或在一起,然后将顺序异或nums数组中的每一个元素,最后异或完成之后就是那个缺失的数字
class Solution {
public:
int missingNumber(vector<int>& nums) {
int n = nums.size();
int ret = 0;
for(int i = 0; i <= n; i++)
{
ret ^= i;
}
//寻找缺失的数字
for(int i = 0; i < n; i++)
{
ret ^= nums[i];
}
return ret;
}
};
按照上面的代码,比如当前在[0,4]区间中寻找确实的数字,首先将ret = 0 ^ 1 ^ 2 ^ 3 ^ 4 ; 之后,再让ret = ret ^ 0 ^ 1 ^ 3 ^ 4; 得到ret = 2;