- 可以用异或,两个相同的数字异或是0,不同的数字异或 不为0
- 分成两组:划分方法:
- 首先把所有数字异或,因为两个数字不同,结果肯定有不是0的位
- 找到第一个不是0的位,然后根据这个划分成两组,一个为0,一个为1:
- 方法是:右移N位,然后&1,结果如果是1,就是1
- 然后分别对每一组取异或,分别得到两个数字
2.*****************数组中其他数字出现三次,只有一个出现一次**********************
题目描述
- 在一个数组中除一个数字只出现一次之外,其他数字都出现了三次
- 请找出那个只出现一次的数字
题目解读
- 剑指Offer 278
- 如果一个数字出现三次,那么它的二进制表示的每一位( 0 或者 1 )也出现三次。如果把所有出现三次的数字的二进制表示的每一位都分别加起来,那么每一位的和都能被 3 整除
- 我们把数组中所有数字的二进制表示的每一位都加起来。如果某一位的和能被 3 整除,那么那个只出现一次的数字二进制表示中对应的那一位是 0 ;否则就是 1