题目地址:
https://www.lintcode.com/problem/single-number-ii/description
给定一个数组,其中有且仅有一个数出现了 次,别的数都出现了 次,要求将出现了 次的数求出来。
思路是将每个数表示成二进制,然后用一个数组记录每个二进制位为 的数有多少个,最后对 取余,再将二进制表示还原为十进制数即可。代码如下:
public class Solution {
/**
* @param A: An integer array
* @return: An integer
*/
public int singleNumberII(int[] A) {
// write your code here
int[] bits = new int[32];
for (int i : A) {
int ind = 0;
while (i != 0) {
bits[ind++] += i & 1;
i >>= 1;
}
}
int res = 0;
for (int i = 0; i < bits.length; i++) {
res += (bits[i] % 3) << i;
}
return res;
}
}
时间复杂度 ,空间 。