题目描述
在整型数组中,有一个数重复出现了3遍,其他数重复出现了2遍,找出这个重复3遍的数。要求用O(1)的空间和至多O(nlogn)的空间复杂度。
思路1
比较简单的思路就是用排序,符合题目要求的可以用堆排序,然后顺序扫描一遍就可以了,这里不再说明。
思路2
由于其他数都出现了偶数遍,我们需要的数出现了奇数遍,而出现偶数遍的数是我们不需要的,可以借助异或
的性质,即
- 两个相同的数异或为0
- 某个数异或0仍为子集
- 异或是满足交换律的
所以可以从头到尾把全部数异或一遍,最后得到的数一定是出现3遍的数。
以此纪念不长记性的脑子-,-