题目描述
一个整型数组里除了两个数字之外,其他的数字都出现了两次。请写程序找出这两个只出现一次的数字。
题解
链接:https://www.nowcoder.com/questionTerminal/e02fdb54d7524710a7d664d082bb7811?answerType=1&f=discussion
记数组中存在的唯一的两个数字分别为a,b
- 对所有数字进行异或,成对相同的数字结果为0,所以最终每一位上存在1的则必然是因为a,b在这一位上不同
- 根据最终结果上存在‘1’的这一位,将原数组分为两组,一组‘1’,一组‘0‘,
- 两组数字再分别异或,最终两个结果就是a,b;
//num1,num2分别为长度为1的数组。传出参数
//将num1[0],num2[0]设置为返回结果
public class Solution {
public void FindNumsAppearOnce(int [] a,int num1[] , int num2[]) {
int m = 0;
for(int i=0;i<a.length;i++) {
m ^= a[i];
}
int temp = 1;
while((m & temp) == 0) {
temp <<= 1;
}
num1[0] = 0;
num2[0] = 0;
for(int i=0;i<a.length;i++) {
if((a[i] & temp) == 0) {
num1[0] ^= a[i];
} else {
num2[0] ^= a[i];
}
}
}
}
1126

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



