一个整型数组 nums
里除两个数字之外,其他数字都出现了两次。请写程序找出这两个只出现一次的数字。要求时间复杂度是O(n),空间复杂度是O(1)。
class Solution {
public int[] singleNumbers(int[] nums) {
int x = 0,y = 0;
int n = 0;
int m = 1;
for(int num : nums){
n ^= num;
}
//循环左移,计算第一位不同的位置
while( (n & m) == 0){
m <<= 1;
}
for(int num : nums){
if( (num & m) == 0){
x ^= num;
}else{
y ^= num;
}
}
return new int[] {x,y};
}
}
执行用时:1 ms, 在所有 Java 提交中击败了100.00%的用户
内存消耗:43 MB, 在所有 Java 提交中击败了39.56%的用户
通过测试用例:35 / 35