Given an array of integers, every element appears three times except for one. Find that single one.
Note:
Your algorithm should have a linear runtime complexity. Could you implement it without using extra memory?
这道题十分开阔思路!
前面有一道Single Number的题是均是重复数为2,这里重复数为3。前面一题可以比较容易想到异或,但是本题显然没有那么简单的逻辑运算可以搞定。
但是考虑到每个Number(int型)显然都是位组成的,也就是我们将改为出现的次数n mod 3即出现了需求的数。
class Solution {
public:
int singleNumber(int A[], int n) {
int bit32[32] = {0};
int res = 0;
for (int i=0; i<n; i++)
for (int j=0; j<32; j++)
{
if ( (A[i] >> j) & 1 )
{
bit32[j]++;
}
}
for (int i=0; i<32; i++)
{
res |= ( (bit32[i] % 3) << i);
}
return res;
}
};