真的是对二进制的题目,遇到一个就蒙圈一个,
这道题是对数组中只有一个出现一次的数字,其他数字都出现2次的二进制解法的增强,可以对比记忆。
import java.util.*;
public class Solution {
public int[] FindNumsAppearOnce (int[] a) {
if (a == null || a.length < 2) {
return null;
}
int[] ans = new int[2];
int res = 0;
for (int x : a) {
res ^= x;
}
int m = 1;
while ((m & res) == 0) {
m = m << 1;
}
for (int x : a) {
if ((m & x) == 0) { // 将a中的数字按照第m位是否为1区分,区分后每个子数组中只有一个出现一次的数
ans[0] ^= x;
} else {
ans[1] ^= x;
}
}
if (ans[1] < ans[0]) {
int tmp = ans[0];
ans[0] = ans[1];
ans[1] = tmp;
}
return ans;
}
} 
京公网安备 11010502036488号