牛客Top200---数组中只出现一次的两个数字(java)

Posted 小样5411

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了牛客Top200---数组中只出现一次的两个数字(java)相关的知识,希望对你有一定的参考价值。

题目

分析

一看到关于出现次数第一反应就是用map集合,有key-value键值对,直接看代码吧,不难,而且他说了就两个数字,已经限定死了

import java.util.*;

public class Solution {
    public int[] FindNumsAppearOnce (int[] array) {
        //遍历整个数组,用hashmap统计出现的次数,然后将出现一次的存到数组中
        Map<Integer, Integer> map = new HashMap<Integer, Integer>();
        int[] res = new int[2];//题目中已经说明数组中只有两个数,如果没有告诉,就要先用list,然后再放到数组中
        int index = 0;//res下标
        for(int i = 0 ; i < array.length ; i++){
            if(map.get(array[i]) != null){
                map.put(array[i],map.get(array[i]) + 1);//map中已经存在就次数+1
            }else{
                map.put(array[i],1);//map中不存在的则添加进去,次数置为1
            }
        }
        //遍历key集合(可优化)
        for(int key : map.keySet()){
            if(map.get(key) == 1){
                res[index] = key;//出现一次的数字
                index++;
            }
        }
        return res;
    }
}


当然上述是可以优化的,这就涉及keySet和entrySet的遍历速率问题,相关文章:keySet()和entrySet()进行遍历效率的对比

我们可以看到数据量大的时候明显entrySet快很多,文章也给出了解释

所以可以进一步改进一下遍历方式,代码如下,用迭代器遍历节点entry,而且数据量大时,用iterator遍历速度也快很多

import java.util.*;

public class Solution {
    public int[] FindNumsAppearOnce (int[] array) {
        //遍历整个数组,用hashmap统计出现的次数,然后将出现一次的存到数组中
        Map<Integer, Integer> map = new HashMap<Integer, Integer>();
        int[] res = new int[2];//题目中已经说明数组中只有两个数,如果没有告诉,就要先用list,然后再放到数组中
        int index = 0;//res下标
        for(int i = 0 ; i < array.length ; i++){
            if(map.get(array[i]) != null){
                map.put(array[i],map.get(array[i]) + 1);//map中已经存在就次数+1
            }else{
                map.put(array[i],1);//map中不存在的则添加进去,次数置为1
            }
        }
        //遍历Entry集合
        Iterator<Map.Entry<Integer,Integer>> iterator = map.entrySet().iterator();
        Map.Entry<Integer, Integer> entry = null;
        while(iterator.hasNext()){
            entry = iterator.next();//获取节点
            if(entry.getValue() == 1){
                res[index++]=entry.getKey();
            }
        }
        return res;
    }
}

以上是关于牛客Top200---数组中只出现一次的两个数字(java)的主要内容,如果未能解决你的问题,请参考以下文章

#yyds干货盘点# 面试必刷TOP101:数组中只出现一次的两个数字

《剑指Offer——数组中只出现一次的两个数字,数组中唯一只出现一次的数字》代码

求数组中只出现一次的两个数字

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

数组中只出现一次的数字

数组中只出现一次的数字