题目
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?
方法
public int singleNumber(int[] A) {
int[] sum = new int[33];
for (int i = 0; i < A.length; i++) {
long num = A[i];
if (num < 0) {
sum[32] += 1;
num = -num;
}
int j = 0;
while(num > 0) {
sum[j] += num % 2;
num = num/2;
j++;
}
}
int result = 0;
for (int i = 31; i >= 0; i--) {
sum[i] = sum[i] % 3;
if (sum[i] == 0) {
result *= 2;
} else {
result = result * 2 + 1;
}
}
sum[32] = sum[32] % 3;
if (sum[32] == 1) {
result = -result;
}
return result;
}