异或

题目:

1、给定一个数组,其中一个数只出现了奇数次,剩余只出现了偶数次  求出这个出现了奇数次的数

 

(1)思路

采取异或运算的形式

N ^N = 0     0^N = N

对数组中的每一个数都进行异或,最终得到的数就是结果

(2)代码

 

 

 

 

 

 

2、给定一个数组,其中两个个数只出现了奇数次,剩余只出现了偶数次  求出这两个出现了奇数次的数

(1)思路:

对数组中的每一个数都进行异或,最终得到的数就是 eor1= a^b  ,由于a和b不相等,所以eor的值肯定不等于0

假设eor二进制的第八位为1,那么a或者b二进制的第八位肯定不相同 (一个0,一个1)

让所有二进制数第八位是0的进行异或运算,那么最终得到的eor2不是a就是b

然后让eor2与eor1进行异或 最终得到另一个数

(2)代码

 

 

 

 

 

比较难理解的是

 

 

 

rightOne二进制只有一个最右边的1 其他都是0

 

posted @ 2021-09-16 15:39  11111ghm  阅读(127)  评论(0编辑  收藏  举报