(Collection)347. Top K Frequent Elements

时间:2023-03-09 01:33:58
(Collection)347. Top K Frequent Elements

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;
      }
      }

        

      Your algorithm's time complexity must be better than O(n log n), where n is the array's size.