题意
给定一个整数数组 nums
,其中恰好有两个元素只出现一次,其余所有元素均出现两次。 找出只出现一次的那两个元素。
题解
使用哈希表可以在 O ( N ) O(N) O(N) 的时间复杂度和 O ( N ) O(N) O(N) 的空间复杂度中解决该问题。
这个问题在常数的空间复杂度中解决有点困难,但可以借助两个位掩码来实现
//Java
class Solution {
public int[] singleNumber(int[] nums) {
// difference between two numbers (x and y) which were seen only once
int bitmask = 0;
for (int num : nums) bitmask ^= num;
// rightmost 1-bit diff between x and y
int diff = bitmask & (-bitmask);
int x = 0;
// bitmask which will contain only x
for (int num : nums) if ((num & diff) != 0) x ^= num;
return new int[]{x, bitmask^x};
}
}