一个整数数组里除了两个数字出现一次以外,其他的数字都出现两次。请找出只出现一次的两个数字,要求时间复杂度O(n),空间复杂度O(1)
- 可以先假设数组中只有一个出现一次的数字
- 异或运算,如果两个数字一样,则结果为0,否则不为0
- 数组从头依次异或到尾,最后结果肯定是只出现一次的数字(数组只有一个只出现一次的数字)
- 如果有两个的话,想办法将数组分成两个部分,每个只出现一次的数字在一个数组中
- 我们可以从头到尾先依次异或,结果肯定是两个只出现一次的数字的异或结果(因为其他都是出现两次,异或结果都是0)
- 在找第5部结果的第一位 为1 的bit,这bit的结果肯定是两个只出现一次的数字(一个当前位是1,另一个是0)异或作用的结果
- 再遍历数组,当前位是1的放一组,当前位是0的放一组,这样两个只出现一次的数字就分开了(因为其他出现两次的数字要么都是1,要么都是0),然后利用3就能求出结果
- flag << 1 是改变不了flag的
- == 优先级 大于 & 等位运算
