真的是对二进制的题目,遇到一个就蒙圈一个,
这道题是对数组中只有一个出现一次的数字,其他数字都出现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; } }