[剑指Java offer]4.数组中只出现一次的数字

在数组中只出现一次很好想 利用一个计数数组来存放数组中数字的次数。不过,这样做的话,复杂度有点高,主要是每次要去找该数字是否出现过。

于是我们使用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);
    }
}
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值