题目地址:
https://www.lintcode.com/problem/single-number-ii/description
给定一个数组,其中有且仅有一个数出现了 1 1 1次,别的数都出现了 3 3 3次,要求将出现了 1 1 1次的数求出来。
思路是将每个数表示成二进制,然后用一个数组记录每个二进制位为 1 1 1的数有多少个,最后对 3 3 3取余,再将二进制表示还原为十进制数即可。代码如下:
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;
}
}
时间复杂度 O ( n ) O(n) O(n),空间 O ( 1 ) O(1) O(1)。