思路一:将数组排序,只出现一次的数只可能出现在0,4,7等位置,对这些位置进行前后判断
思路二:将数组中的每个数都变成2进制的数,然后全部相加,用一个32长度的bits数组储存相加结果,然后对每一位除以三,凡是不能除尽的就标1,最后得到的数就是只出现一次的数。
实现结果如下:
public int findNumber(int a[], int n) {
int result = 0;
int bits[] = new int[32];
for (int i = 0; i < n; i++) {
for (int j = 0; j < bits.length; j++) {
bits[j] += ((a[i] >> j) & 1);
}
}
for (int i = 0; i < bits.length; i++) {
if (bits[i] % 3 != 0) {
result += (1 << i);
}
}
return result;
}
网友评论