题目:
一个整型数组 nums 里除两个数字之外,其他数字都出现了两次。请写程序找出这两个只出现一次的数字。要求时间复杂度是O(n),空间复杂度是O(1)。

解题过程:
异或运算
题解见官方
class Solution {
public int[] singleNumbers(int[] nums) {
int res=0;
for(int i : nums){
res ^= i;
}
int h = 1;
while((h&res)==0){
h<<=1;
}
int a=0, b=0;
for(int i : nums){
if((i&h)!=0){
a ^= i;
}else{
b ^= i;
}
}
return new int[]{a,b};
}
}
执行结果:

该博客介绍了如何利用异或运算的性质,在O(n)的时间复杂度和O(1)的空间复杂度下,找出一个整型数组中除了两个数字外其他数字都出现两次的两个唯一数字。解题思路是通过遍历数组,对所有元素进行异或操作,然后通过位运算找到这两个数字。最后,通过再次遍历数组并根据找到的位标记将两个数字分离出来。
1208

被折叠的 条评论
为什么被折叠?



