题目描述给定一个包含0,1,2,...,n中n个数的序列,找出0..n中没有出现在序列中的那个数。相关代码varmissingNumber=function(nums){varres=nums.length;for(vari=0;i<nums.length;i++){res=res^(i^nums[i]);}returnres;};看到一位大神的答案,但是不太理解res=res^(i^nums[i]);的意思,查了^的解释,调试了程序,还是不太明白是怎么对比出来的,麻烦解答一下,谢谢
2 回答
元芳怎么了
TA贡献1798条经验 获得超7个赞
Bitwise_Operators#(按位异或)varmissingNumber=function(nums){varres=nums.length;for(vari=0;ires=res^(i^nums[i]); }returnres;};首先异或不需要管顺序。假设数组为连续[1,2...,n]数组,则nums.length必然与数组当中的某个值相等,即n^nums.length为0,因为x^0为x,所以若数据连续,则必然有n-1与上诉过程相同逻辑。反正就是消消乐的意思,假设nums为[1,2,3]则最后的结果为length异或每个值异或下标,也就是3^1^2^3^0^1^2。PS:个人不建议使用这样的代码
添加回答
举报
0/150
提交
取消