题目描述给定一个包含0,1,2,...,n中n个数的序列,找出0..n中没有出现在序列中的那个数。相关代码varmissingNumber=function(nums){varres=nums.length;for(vari=0;i
2 回答
婷婷同学_
TA贡献1844条经验 获得超8个赞
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:个人不建议使用这样的代码
饮歌长啸
TA贡献1951条经验 获得超3个赞
主要是两个性质:异或满足交换律;两个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...。牛逼一点的,参考书籍《算法心得高效算法的奥秘》,此书已快绝版,且异常烧脑。
添加回答
举报
0/150
提交
取消