《剑指offer》 数组中只出现一次的数字(数组中只出现一次的两个数字)(Java)
程序员文章站
2022-07-15 11:59:11
...
题目描述
一个整型数组里除了两个数字之外,其他的数字都出现了两次。请写程序找出这两个只出现一次的数字。
AC代码
//num1,num2分别为长度为1的数组。传出参数
//将num1[0],num2[0]设置为返回结果
public class Solution {
public void FindNumsAppearOnce(int [] array,int num1[] , int num2[]) {
int xor=0;
for(int i:array){
xor^=i;
}
int index=getFirst(xor);
for(int i:array){
if(match(i,index)){
num1[0]^=i;
}else{
num2[0]^=i;
}
}
}
int getFirst(int n){
for(int i=0;i<32;i++){
if((n&1)==0){
n>>=1;
}else{
return i;
}
}
return 0;
}
boolean match(int n,int index){
n>>=index;
return (n&1)==1;
}
}
上一篇: 一刷剑指offer(40)——数组中只出现一次的数字
下一篇: 89. 格雷编码