LeetCode Top 100 Liked Questions 347. Top K Frequent Elements (Java版; Medium)
题目描述
Given a non-empty array of integers, return the k most frequent elements.
Example 1:
Input: nums = [1,1,1,2,2,3], k = 2
Output: [1,2]
Example 2:
Input: nums = [1], k = 1
Output: [1]
Note:
You may assume k is always valid, 1 ≤ k ≤ number of unique elements.
Your algorithm's time complexity must be better than O(n log n), where n is the array's size.
classSolution{publicint[]topKFrequent(int[] nums,int k){int n = nums.length;if(n==0){returnnewint[]{};}
HashMap<Integer, Integer> map =newHashMap<>();for(int a : nums){
map.put(a, map.getOrDefault(a,0)+1);}
PriorityQueue<Map.Entry<Integer, Integer>> heap =newPriorityQueue<>((a,b)->a.getValue()-b.getValue());for(Map.Entry<Integer, Integer> entry : map.entrySet()){if(heap.size()<k){
heap.add(entry);}elseif(entry.getValue()>heap.peek().getValue()){
heap.add(entry);
heap.poll();}}int[] res =newint[k];int i =0;while(!heap.isEmpty()){
res[i++]= heap.poll().getKey();}return res;}}
第一次做; 使用桶排序;2个核心:1)桶的大小是数组元素个数加一 2)桶的索引i表示出现i次的元素构成的List; 细节: new List后面不能加<>