开发者社区> 问答> 正文

如何理解利用按位异或来得到数组中不重复的项?

var singleNumber = function(nums) {
    for(var i = 1,len = nums.length;i<len;i++) {
        nums[0] ^= nums[i]
    }
    return nums[0]
};
获取数组中只出现过一次的数字的算法,用到了XOR,但不太能理解

singleNumber([1,3,1,4,6,4,6,5,3])

[3, 3, 1, 4, 6, 4, 6, 5, 3]
[7, 3, 1, 4, 6, 4, 6, 5, 3]
[1, 3, 1, 4, 6, 4, 6, 5, 3]
[5, 3, 1, 4, 6, 4, 6, 5, 3]
[3, 3, 1, 4, 6, 4, 6, 5, 3]
[6, 3, 1, 4, 6, 4, 6, 5, 3]
[5, 3, 1, 4, 6, 4, 6, 5, 3]

只记得自身的XOR会得到0

展开
收起
a123456678 2016-06-07 21:10:42 1862 0
1 条回答
写回答
取消 提交回答
  • a^a=0
    0^a=a
    异或满足交换率和结合率
    因此a^b^c^b^c=a^(b^b)^(c^c)=a

    2019-07-17 19:31:02
    赞同 展开评论 打赏
问答分类:
问答地址:
问答排行榜
最热
最新

相关电子书

更多
低代码开发师(初级)实战教程 立即下载
冬季实战营第三期:MySQL数据库进阶实战 立即下载
阿里巴巴DevOps 最佳实践手册 立即下载