看了何海涛的日志 他分别解决了一个 两个 三个 出现一次的数字的思路 给人的感觉有一生二 二生三 三生万物的思维
现把自己的感悟写下来
一个 思路很简单 所有数字异或的结果
两个 关键是区别 所有的数字异或的结果同时也是两个出现一次数字异或的结果 记为XORresult<>0 区别这两个数字就用XORresult中为1的某一位
三个 关键还是区别 所有的数字异或的结果同时也是三个出现一次数字异或的结果 记为XORresult
这个地方是关键哦
经过一系列的反证法 作者得出来了一些列结论
具体过程:
1. 对于任何三个不为0的数字 i, j, k, f(i)^f(j)^f(k) 结果不可能为0 如下图
因此 f[ f( XORresult^a ) ^ f( XORresult^b ) ^ f( XORresult^c ) ... ] 结果不可能为0;
2. XORresult^a XORresult^b XORresult^c 第m位不可能都是1 这个很容易理解吧!