刷题日记6.25

136. 只出现一次的数字

这道题考察的是异或算法,也是异或算法的一个典型作用例子。

注意题目要求实现线性时间复杂度算法解决,所以就不要想着排序或者用set数组之类的了。

先讲讲异或算法。

异或(XOR)是一种常用的位运算操作,通常用于加密、校验和其它计算任务中。异或操作符在JavaScript等编程语言中的表示为`^`。对于两个操作数的每一对对应的比特位,只有当它们不同时结果才为1否则结果为0

异或运算的基本性质
- 交换律:A ^ B = B ^ A
- 结合律:A ^ (B ^ C) = (A ^ B) ^ C(可以将式子里的任意两个遍量优先异或!!!)
- 自反性:A ^ A = 0(!!!两个相同的数异或会等于0)
- 恒等性:A ^ 0 = A(一个数和本身异或值为本身!!!)

 

所以题目的做法一目了然

function findUnique(arr) {
    let unique = 0;
    for (let num of arr) {
        unique ^= num;
    }
    return unique;
}

所有成对的数字通过异或运算会抵消为0,最后剩下的就是那个唯一的数。

  • 9
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值