347. Top K Frequent Elements

https://leetcode.com/problems/top-k-frequent-elements/discuss/126241/java

先记录次数 然后按次数放进数组 然后从后往前取出

 

 

 

 

 1 class Solution {
 2     public List<Integer> topKFrequent(int[] nums, int k) {
 3         Map<Integer, Integer> map = new HashMap<Integer, Integer>();
 4         for(int num : nums) {
 5             map.put(num, map.getOrDefault(num, 0) + 1);
 6         }
 7         
 8         Set<Integer> set = map.keySet();
 9         List<Integer>[] record = new List[nums.length + 1]; //注意新建方法没有<>
10         for(int key : set) {
11             int freq = map.get(key);
12             if(record[freq] == null) {
13                 record[freq] = new ArrayList<>(); //注意一下要新建
14             }
15             record[map.get(key)].add(key);
16         }
17         
18         List<Integer> res = new ArrayList<>();
19         for(int i = record.length - 1; i >= 0; i--) {
20             if(record[i] != null) {
21                 for(int j = 0; j < record[i].size(); j++) {
22                     if(res.size() < k) {
23                         res.add(record[i].get(j));
24                     }else {
25                         break;
26                     }
27                 }    
28             }
29             
30         }
31         return res;   
32     }
33 }

 

posted @ 2018-09-03 06:58  jasoncool1  阅读(110)  评论(0编辑  收藏  举报