347. Top K Frequent Elements

来源:互联网 发布:网络没问题游戏上不去 编辑:程序博客网 时间:2024/06/07 22:00

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.

参考Discuss 简单使用了桶排序的思路,时间复杂度O(n)

public class Solution {    public List<Integer> topKFrequent(int[] nums, int k) {        Map<Integer, Integer> map = new HashMap<>();        for(int n : nums) {            map.put(n, map.getOrDefault(n, 0) + 1);        }        List<Integer>[] arr = new List[nums.length + 1];        for(int key : map.keySet()) {            int val = map.get(key);            if(arr[val] == null) {                arr[val] = new ArrayList<Integer>();            }            arr[val].add(key);        }        List<Integer> result = new ArrayList<>();        for(int i = arr.length - 1; i >= 0 && result.size() < k; i--) {            if(arr[i] != null) {                result.addAll(arr[i]);            }        }        return result;    }}