题解 | #数组中只出现一次的两个数字#
数组中只出现一次的两个数字
https://www.nowcoder.com/practice/389fc1c3d3be4479a154f63f495abff8
import java.util.*; public class Solution { public int[] FindNumsAppearOnce (int[] nums) { /* step 1:遍历整个数组,将每个元素逐个异或运算,得到 a^b step 2:我们可以考虑位运算的性质,找到二进制中第一个不相同的位,将所有数组划分成两组 step 3:遍历数组对分开的数组单独作异或连算 step 4:最后整理次序输出 */ int xor = 0; for(int x : nums) { xor ^= x; } int mask = 1; // 第一个不同的二进制位 while((mask & xor) == 0) { mask <<= 1; } int a = 0, b = 0; for(int x : nums) { if((x & mask) == 0) { a ^= x; } else { b ^= x; } } if(a > b) { a ^= b; b ^= a; a ^= b; } return new int[] {a, b}; } }