一个整型数组里除了两个数字之外,其他的数字都出现了两次。请写程序找出这两个只出现一次的数字。
方法:
import java.util.Set;
import java.util.HashSet;
public class Solution {
public void FindNumsAppearOnce(int [] array,int num1[] , int num2[]) {
Set<Integer> set=new HashSet<Integer>();
for(int i=0;i<array.length;i++){
if(set.contains(array[i])){
set.remove(array[i]);
}else{
set.add(array[i]);
}
}
int j=0;
for(Integer i:set){
if(j==0){
num1[0]=i;
j++;
}
if(j==1){
num2[0]=i;
}
}
}
}
方法:
public class Solution {
public void FindNumsAppearOnce(int [] array,int num1[] , int num2[]) {
if(array==null || array.length<2)
return;
int count=0;
for(int i=0;i<array.length;i++){
count^=array[i];
}
int index=findFirstOne(count);
int number1=0,number2=0;
for(int i=0;i<array.length;i++){
if(is(array[i],index)){
number1^=array[i];
}else{
number2^=array[i];
}
}
num1[0]=number1;
num2[0]=number2;
}
public int findFirstOne(int num){
int index=0;
while((num&1)==0){
num=num>>1;
index++;
}
return index;
}
public boolean is(int num,int index){
num=num>>index;
return (num&1)==1?true:false;
}
}