题目描述:
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.
解题思路:
使用HashMap计数
代码如下:
public class Solution { public List<Integer> topKFrequent(int[] nums, int k) { Map<Integer, Integer> map = new HashMap<Integer, Integer>(); List<Integer>[] freqArray = new List[nums.length + 1]; for(int num : nums){ map.put(num, map.getOrDefault(num, 0) + 1); } for(int key : map.keySet()){ int freq = map.get(key); if(freqArray[freq] == null) freqArray[freq] = new ArrayList<Integer> (); freqArray[freq].add(key); } List<Integer> res = new ArrayList<>(); for(int i = freqArray.length - 1; i >= 0 & res.size() < k; i--){ if(freqArray[i] != null) res.addAll(freqArray[i]); } return res; } }