剑指offer四十之数组中只出现一次的数字

一、题目

  一个整型数组里除了两个数字之外,其他的数字都出现了两次。请写程序找出这两个只出现一次的数字。

二、思路

    建一个hashMap,统计各数字出现的次数,然后遍历hashMap,输出出现一次的数字。

三、代码

//num1,num2分别为长度为1的数组。传出参数
//将num1[0],num2[0]设置为返回结果

import java.util.HashMap;
import java.util.Map;
import java.util.Set;

public class Solution {
    public void FindNumsAppearOnce(int [] array,int num1[] , int num2[]) {
        
        if(array==null||array.length==0){
            return;
        }
        
        //新建hashMap,统计字数出现的次数
        HashMap<Integer,Integer> hashMap=new HashMap<Integer, Integer>();

        //存储字符出现一次的数
        int[] num=new int[2];
        //统计每个字符的次数
        for(int key:array){
            if(hashMap.containsKey(key)){
                hashMap.put(key,hashMap.get(key)+1);
            }else {
                hashMap.put(key,1);
            }
        }

        //遍历,如果出现次数为1,则将改数保存到数组num中
        int i=0;
        Set<Map.Entry<Integer,Integer>> set=hashMap.entrySet();
        for(Map.Entry<Integer,Integer> s:set){
            if(s.getValue()==1){
                num[i]=s.getKey();
                i++;
            }
        }

        //保存结果
        num1[0]=num[0];
        num2[0]=num[1];
    }
}
View Code

---------------------------------------------

参考链接:

https://www.nowcoder.com/practice/e02fdb54d7524710a7d664d082bb7811?tpId=13&tqId=11193&rp=2&ru=/ta/coding-interviews&qru=/ta/coding-interviews/question-ranking

posted @ 2017-10-12 21:23  AI菌  阅读(244)  评论(0编辑  收藏  举报