Given a non-empty array of integers, return the k most frequent elements.
For example,
Given [1,1,1,2,2,3]
and k = 2, return [1,2]
.
Note:
- You may assume k is always valid, 1 ≤ k ≤ number of unique elements.
-
public class Solution { //桶排序 public List<Integer> topKFrequent(int[] nums, int k) { //也可以使用PriorityQueue Map<Integer,Integer> map=new HashMap<Integer,Integer>(); List<Integer> res =new ArrayList<Integer>(); for(int num: nums){ map.put(num,map.getOrDefault(num,0)+1); } List<Integer>[] bucket=new List[nums.length+1]; for(int key : map.keySet()){ int freq=map.get(key); if(bucket[freq]==null){ bucket[freq]=new ArrayList<Integer>(); } bucket[freq].add(key); } for(int i=nums.length;i>=0 && res.size()<k;i--){ if(bucket[i]!=null) res.addAll(bucket[i]); } return res; } }