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?
http://oj.leetcode.com/problems/single-number-ii/
Solution:
Bit operation, use a bit array to count the number of every bit of all the numbers. O(n) time and O(1) space
https://github.com/starcroce/leetcode/blob/master/single_number_II.cpp
// 60 ms for 11 test cases
class Solution {
public:
int singleNumber(int A[], int n) {
// this question seems to be every other elements appear three times and one appears ONE time
int bits[32];
int res = 0;
for(int i = 0; i < 32; i++) {
bits[i] = 0;
for(int j = 0; j < n; j++) {
// count the number of bits of each number
// if that bit is 1, bit count++
if((A[j]>>i) & 1) {
bits[i] = (bits[i]+1) % 3;
}
}
// only the bit of the single number would be 1, others are 0
res |= bits[i]<<i;
}
return res;
}
};