关于运算符^问题跪求!

题目描述
给定一个包含0,1,2,...,n中n个数的序列,找出0..n中没有出现在序列中的那个数。
相关代码
varmissingNumber=function(nums){
varres=nums.length;
for(vari=0;ires=res^(i^nums[i]);
}
returnres;
};
看到一位大神的答案,但是不太理解res=res^(i^nums[i]);的意思,查了^的解释,调试了程序,还是不太明白是怎么对比出来的,麻烦解答一下,谢谢
慕慕森
浏览 279回答 2
2回答

婷婷同学_

Bitwise_Operators#(按位异或)varmissingNumber=function(nums){varres=nums.length;for(vari=0;i

饮歌长啸

主要是两个性质:异或满足交换律;两个bits异或,若相同则为0;若相异则为1。简化下问题,比如给定数组[0,1,2,3,5],它是少一个4的,现在我们要把4找出来。(0^1^2^3^4^5)^(0^1^2^3^5)=(0^0)^(1^1)^(2^2)^(3^3)^(5^5)^4=0^0^0^0^0^4=4就像上面一位朋友说的,消消乐,这个说法形象。单单针对这道题(老题目了)来说,这个解法应该是最佳的。在实际项目中,位运算不是不能用,反而是建议你多用,但前提是你,会用,用对,且必须要有注释,没有这三个,还是老实本分点比较好。基本的位运算,参考https://subetter.com/articles...。牛逼一点的,参考书籍《算法心得高效算法的奥秘》,此书已快绝版,且异常烧脑。
打开App,查看更多内容
随时随地看视频慕课网APP

相关分类

JavaScript