leetcode 347. Top K Frequent Elements

来源:互联网 发布:茅台葡萄酒 知乎 编辑:程序博客网 时间:2024/06/07 16:55

本题要求返回前k个频率的数字

For example,
Given [1,1,1,2,2,3] and k = 2, return [1,2].

我们的思路是构建一个map集合,将所有数字的出现次数统计并利用map的比较器进行排序,最后新建一个list1集合将结果返回;代码如下:

class Solution {    public List<Integer> topKFrequent(int[] nums, int k) {        Map<Integer, Integer> map = new HashMap<>();                   for(int key : nums){            if(map.containsKey(key)){                map.put(key, (Integer)map.get(key) + 1 );            }else{                map.put(key, 1);            }        }        List<Map.Entry<Integer,Integer>> list = new ArrayList<Map.Entry<Integer,Integer>>(map.entrySet());        //然后通过比较器来实现排序        Collections.sort(list,new Comparator<Map.Entry<Integer,Integer>>() {            //降序排序            public int compare(Map.Entry<Integer,Integer > o1,                    Map.Entry<Integer, Integer> o2) {                return o2.getValue().compareTo(o1.getValue());            }                    });        List< Integer> list1 = new ArrayList<>();        Iterator<Map.Entry<Integer, Integer>> it = list.iterator();        while(it.hasNext()&&k>0){        Map.Entry<Integer,Integer> en = it.next();        list1.add(en.getKey());            k--;                        }        return list1;    }}




原创粉丝点击