LeetCode---Top K Frequent Elements解题分析

来源:互联网 发布:嵌入式c笔试 编程题 编辑:程序博客网 时间:2024/05/16 07:18
题意描述:给定一个整数数组和数字K,返回数组中出现最频繁的K个元素。如:

输入[1,1,1,2,2,3],K=2,返回[1,2]。要求时间复杂度为O(nlogn)

解题思路:考虑到统计字符及其出现频率,自然就想到运用HashMap数据结构,key为元素,value为该元素出现次数。然后将结果按照value排序,返回前K个key值即为所求

***这里主要是对HashMap中的数据按照value值排序***

public List<Integer> topKFrequent(int[] nums, int k) {Map<Integer, Integer> map = new HashMap<>();for(int num : nums){Integer count = map.get(num);if(count == null)count = 0;map.put(num, count+1);}//对map结果根据value值进行排序List<Map.Entry<Integer, Integer>> entryList = new ArrayList<>(map.entrySet());Collections.sort(entryList, new Comparator<Map.Entry<Integer, Integer>>() {     public int compare(Map.Entry<Integer, Integer> o1, Map.Entry<Integer, Integer> o2) {        //return (o1.getKey() - o2.getKey());//根据key排序  return (o2.getValue() - o1.getValue());//根据value排序  //return (o1.getKey()).toString().compareTo(o2.getKey());  }  });  List<Integer> res = new ArrayList<>();for (int i = 0; i < entryList.size() && i<k; i++) {     System.out.println(entryList.get(i));     res.add(entryList.get(i).getKey());}  return res;}


0 0
原创粉丝点击