classSolution{ publicint[] singleNumber(int[] nums) { // 求所有数字异或和 int sum = 0; for (int num : nums) { sum ^= num; } // 找异或和第一个为1的位 int mask = 1; while ((sum & mask) == 0) { mask <<= 1; } // 以该位为依据分组异或 int x = 0; int y = 0; for (int num : nums) { if ((num & mask) == 0) { x ^= num; } else { y ^= num; } } returnnewint[]{x, y}; } }
num出现一次,其余元素出现三次
看图思路:
1 2 3 4 5 6 7 8 9 10 11
funcsingleNumber(nums []int)int { res := 0 for i:=0 ; i<32 ; i++{ bit := 0 for _,v := range nums{ bit += ((v>>i) & 1) } res += (bit%3)<<i } return res }