//num1,num2分别为长度为1的数组。传出参数
//将num1[0],num2[0]设置为返回结果
import java.util.*;
public class Solution {
//解法一:暴力匹配
public void FindNumsAppearOnce(int [] array,int num1[] , int num2[]){
if(array==null||array.length==0||array.length==1)
return;
HashMap <Integer,Integer>map=new HashMap<>();
for (int i=0;i!=array.length;i++ ) {
if(!map.containsKey(array[i]))
{
map.put(array[i],1);
}else{
map.put(array[i],2);
}
}
boolean first=true;
for(int k:map.keySet()){
if(map.get(k)==1&&first)
{
num1[0]=k;
first=false;
continue;
}
if(map.get(k)==1)
{
num2[0]=k;
}
}
System.out.println(num1[0]);
System.out.println(num2[0]);
}
//解法二: 按位运算,优化后的解法
public void FindNumsAppearOnce2(int [] array,int num1[] , int num2[]) {
if(array==null||array.length==0||array.length==1)
return;
int sum=array[0];
for(int i=1;i!=array.length;i++){
sum^=array[i];
}
int index=0;
for(;index!=32;index++){
if((sum&(1<<index))!=0) break;
}
for(int i=0;i!=array.length;i++){
if((array[i]&(1<<index))!=0){
num2[0]^=array[i];
}else{
num1[0]^=array[i];
}
}
System.out.println(num1[0]);
System.out.println(num2[0]);
}
public static void main(String[]args){
//System.out.println("Hello");
int[]arr={2,2,3,3,4,5,6,6};
int[]num1=new int[1];
int[]num2=new int[1];
Solution s=new Solution();
s.FindNumsAppearOnce2(arr,num1,num2);
}
}
数组中只出现一次的数字
最新推荐文章于 2022-04-21 18:09:17 发布