//num1,num2分别为长度为1的数组。传出参数 //将num1[0],num2[0]设置为返回结果 /* //offer算法解 public class Solution { public void FindNumsAppearOnce(int [] array,int num1[] , int num2[]) { int differNumFirst=0; //对原数组进行异或运算 for(int i=0;i<array.length;i++){ differNumFirst=differNumFirst^array[i]; } //判断异或结果中从左至右第一个出现1的位置 int index=1; while((index&differNumFirst)==0){ index=index<<1; } int resultOfOne=0; int resultOfTwo=0; for(int i=0;i<array.length;i++){ //判断与index中第一个“1”的位置相同的数 if((index&array[i])==0){ resultOfOne=resultOfOne^array[i]; }else{ resultOfTwo=resultOfTwo^array[i]; } } num1[0]=resultOfOne; num2[0]=resultOfTwo; } } */ //利用hashMap解 import java.util.HashMap; public class Solution { public void FindNumsAppearOnce(int [] array,int num1[] , int num2[]) { HashMap<Integer,Integer> hash=new HashMap<Integer,Integer>(); for(int i=0;i<array.length;i++){ if(hash.containsKey(array[i])){ hash.put(array[i],2); }else{ hash.put(array[i],1); } } //寻找第一个 for(int i=0;i<array.length;i++){ //hashmap的get()返回指定的value if(hash.get(array[i])==1){ num1[0]=array[i]; hash.put(array[i],0); break; } } //寻找第二个 for(int i=0;i<array.length;i++){ if(hash.get(array[i])==1){ num2[0]=array[i]; hash.put(array[i],0); break; } } } }