题目:
Given an array of integers, every element appears three times except for one. Find that single one.
解答:
如果是挑出非偶数次数的元素,可以利用每个元素依次异或的方法。但是非奇数次数(3,5,7,9……)的元素?
如果要快,可以hash_map存储。然后遍历一遍hash_map找到Single Number。
换种思路,按位找不同的Single Number对应的位。细节上:
- bit = 1 << i; 然后利用当前数与 bit 位与,根据结果判断当前数的第 i 位是否有 1;
- 将最终的结果第 i 位置为 1,可以位或操作:ans | bit.
class Solution {
public:
int singleNumber(int A[], int n) {
int bit, bitsum;
int ans;
for(int i = 0; i < 32; i++)
{
bit = 1 << i;
bitsum = 0;
for(int j = 0; j < n; j++)
{
if(bit & A[j]) bitsum++;
}
if(bitsum % 3) ans = ans | bit;
}
return ans;
}
};