[leetcode]位操作总结

本文介绍了一种使用异或运算寻找数组中唯一出现一次的数字的方法,并详细解释了其实现原理。针对SingleNumber和SingleNumberII问题,通过三个变量one、two、three来跟踪每个数字出现的次数。

1. 异或

1) Single Number

a^a = 0, a^0 = a

所以出现两次的整数异或得到0,只出现一次的数异或0得到它本身。


2. 综合

1) Single Number II

如何记录目前出现一次,两次,三次的整数呢?

用三个变量one,two,three分别记录出现一次,两次,三次的数字。

一个变量第一次出现时,只记录到one中;第二次出现时,记录到two中,从one中删除;第三次出现时,在two中,记录到one中,记录到three中,然后从one和two中删除。

所以最后保存在one中的就是所求的唯一出现一次的数。

for(i=0;i<n;i++)
{
        two ^= (one&A[i]); // two stores all the bits(=1) appear twice
        one ^= A[i]; // one stores all the bits(=1) appear once
        three = one&two; // three stores all the bits appear three times
        one &= (~three); // clear the bits in one and two which appear three times
        two &= (~three);
}


评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值