分享一下异或运算:
异或运算可以查找一串连续数字中的缺失值,是不是很神奇呢?
根据异或的特点a=a^b^b;这个式子的含义可以拆开来理解,b^b=0,0与任何数异或的值都等于它本身。
本题需要求0,1,2, 3....一连串数字中的缺失值,根据异或的特点,我们可以对数组中的每个数字异或各自的下标,再将结果与数组中的下一个数字与下一个数字异或后的结果进行异或,以此类推,最后将结果和数组的长度进行异或,最后可以找到缺失值,为什么可以这么做呢?
举个例子来说,数组中的数字序列为{3,0,1};按照上面的做法
1.3^0^0^1^1^2这个式子的结果为2^3
2.2^3的结果再与3异或。
我们知道,如果数组中某个值不缺失,那么该数与它的下标异或一定为0(假设数组是有序的),数组中最大值与数组的长度异或后结果也为0,最后还剩下缺失值的下标,该下标与零异或一定等于本身,这样也就找到了缺失值。
关于异或运算详解请看https://blog.csdn.net/youshaoduo/article/details/69252736
源码附上:
class Solution {
public:
int missingNumber(vector<int>& nums) {
int result=nums.size();
int length=result;
for(int i=0;i<length;i++){
result^=nums[i];
result^=i;
}
return result;
}
};