cKK

............当你觉得自己很辛苦,说明你正在走上坡路.............坚持做自己懒得做但是正确的事情,你就能得到别人想得到却得不到的东西............

导航

(Collection)347. Top K Frequent Elements

Posted on 2016-06-24 16:14  cKK  阅读(125)  评论(0编辑  收藏  举报

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.