题目解析
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;