LeetCode 347. Top K Frequent Elements

来源:互联网 发布:服务器基础知乎 编辑:程序博客网 时间:2024/06/01 22:54

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.

  • Your algorithm's time complexity must be better than O(n log n), where n is the array's size.
public class Solution {    public List<Integer> topKFrequent(int[] nums, int k) {        int n = nums.length;        List<Integer>[] bucket = new List[n+1];        List<Integer> list = new ArrayList<>();        Map<Integer,Integer> map = new HashMap<>();        for(int i =0 ;i <n; i++) {            map.put(nums[i],map.getOrDefault(nums[i],0)+1);        }        for(int key : map.keySet()) {            int temp = map.get(key);            if(bucket[temp] == null) {                bucket[temp] = new ArrayList<>();            }            bucket[temp].add(key);        }        for(int i = bucket.length -1 ; i>=0 && list.size() < k; i--) {            if(bucket[i]!=null) {                list.addAll(bucket[i]);            }        }        return list;    }}


原创粉丝点击