Top K Frequent Elements
给一个数组, 返回前k个高频数字.
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 |
public class Solution { public List<Integer> topKFrequent(int[] nums, int k) { Map<Integer, Integer> map = new HashMap<>(); for(int i : nums){ if(map.containsKey(i)) map.put(i,map.get(i)+1); else map.put(i,0); } PriorityQueue<Map.Entry<Integer,Integer>> pq = new PriorityQueue<>((a, b) -> a.getValue()-b.getValue()); for(Map.Entry<Integer,Integer> e : map.entrySet()){ pq.add(e); if(pq.size()>k) pq.poll(); } List<Integer> res = new ArrayList<Integer>(); while(!pq.isEmpty()){ res.add(pq.poll().getKey()); } return res; } } |