在数组中只出现一次很好想 利用一个计数数组来存放数组中数字的次数。不过,这样做的话,复杂度有点高,主要是每次要去找该数字是否出现过。
于是我们使用HashMap来存放这个映射关系。HashMap是利用散列表构建的,主要优点就是可以O(1)访问。但是缺点则是需要开O(n)的空间。
import java.util.HashMap;
import java.util.Map;
import java.util.Scanner;
import java.util.Set;
public class offer50 {
//题目描述
//一个整型数组里除了两个数字之外,其他的数字都出现了两次。请写程序找出这两个只出现一次的数字。
//array 输入数组 num1[0]第一个数字 num2[0]第二个数字
public void FindNumsAppearOnce(int [] array,int num1[] , int num2[]) {
Map<Integer,Integer> map = new HashMap<Integer, Integer>();
for(int num:array){
if(map.get(num)==null) map.put(num,1);
else map.put(num,map.get(num)+1);
}
Set<Map.Entry<Integer,Integer>> entrySet = map.entrySet();
boolean flag = true;
for(Map.Entry<Integer,Integer> entry:entrySet){
if(entry.getValue()==1 && flag) {
num1[0]=entry.getKey();
flag=false;
}
else if(entry.getValue()==1) num2[0]=entry.getKey();
}
}
static public void main(String argv[]) {
Scanner scanner = new Scanner(System.in);
int array[] = new int[8];
for(int i=0;i<8;i++){
array[i]=scanner.nextInt();
}
offer50 offer = new offer50();
int num1[]= new int[1];
int num2[]= new int[1];
offer.FindNumsAppearOnce(array,num1,num2);
}
}