题目描述:
示例 1:
示例 2:
示例 3:
思路:
代码实现:
class Solution {
public int[] singleNumber(int[] input) {
// 结果数组.
int[] arr = new int[2];
int result = 0, index = 0;
// 设只出现过一次的数字为A,B. result=A^B;
for (int i = 0; i < input.length; i++) {
result ^= input[i];
}
// 从右往左遍历查找A,B第一个不同的二进制位.
while ((result & 1) == 0) {
result = result >>> 1;
index++;
}
// 将数组分为包含A与包含B的两部分.
for (int num : input) {
if (((num >>> index) & 1) == 0) {
arr[0] ^= num;
} else {
arr[1] ^= num;
}
}
return arr;
}
}