Poison

剑指 Offer 56 - I. 数组中数字出现的次数

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
class Solution {
public int[] singleNumbers(int[] nums) {
// 相同 bit 异或为 0, 不同 bit 异或为 1

int aXorB = 0;
for (int num : nums) {
aXorB ^= num;
}

int k = 1;
while ((k & aXorB) == 0) {
k <<= 1;
}

int a = 0, b = 0;
for (int num : nums) {
if ((num & k) != 0) {
a ^= num;
} else {
b ^= num;
}
}

return new int[]{a, b};
}
}
Reference

剑指 Offer 56 - I. 数组中数字出现的次数