[剑指Java offer]4.数组中只出现一次的数字
2018-03-21 17:59
344 查看
在数组中只出现一次很好想 利用一个计数数组来存放数组中数字的次数。不过,这样做的话,复杂度有点高,主要是每次要去找该数字是否出现过。
于是我们使用HashMap来存放这个映射关系。HashMap是利用散列表构建的,主要优点就是可以O(1)访问。但是缺点则是需要开O(n)的空间。
于是我们使用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); } }
相关文章推荐
- 剑指offer解题报告(Java版)——数组中只出现一次的数字 40
- 剑指Offer面试题40(Java版):数组出现一次的数字
- 剑指Offer 40题 数组中只出现一次的数字 Java版
- 剑指Offer面试题40:数组中只出现一次的数字 Java实现
- 【剑指offer-Java版】40数组中只出现一次的数字
- 剑指offer:数组中只出现一次的数字(java)
- 剑指Offer:面试题29——数组中出现次数超过一半的数字(java实现)
- 剑指offer 41 数组中只出现一次的数字
- 剑指offer--面试题40:数组中只出现一次的数字
- 剑指offer 面试题40 数组中只出现一次的数字
- 剑指offer 数组中只出现一次的数字
- 【剑指Offer学习】【面试题40:数组中只出现一次的数字】
- 剑指Offer_40_数组中只出现一次的数字
- 剑指offer 数组中只出现一次的数字
- 剑指offer-数组中只出现一次的数字
- 剑指offer:数组中只出现一次的数字
- 【剑指offer】数组中只出现一次的数字
- 【剑指offer】Q40:数组中出现一次的数字
- 【剑指offer】数字数组中只出现一次(2)
- [剑指offer-1351]数组中只出现一次的数字