Poison

260. Single Number III

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[] singleNumber(int[] nums) {
// 相同 bit 异或为 0, 不同 bit 异或为 1

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

int diffMask = 1;
while ((mergedMask & diffMask) == 0) {
diffMask <<= 1;
}

int x = 0, y = 0;
for (int num : nums) {
if ((num & diffMask) != 0) {
x ^= num;
} else {
y ^= num;
}
}

return new int[]{x, y};
}
}
Reference

260. Single Number III
剑指 Offer 56 - I. 数组中数字出现的次数