|
1 | 1 | class Solution {
|
2 |
| - |
3 |
| - public List<Integer> topKFrequent(int[] nums, int k) { |
4 |
| - Map<Integer, Integer> map = new HashMap<>(); |
5 |
| - |
6 |
| - for (int i=0;i<nums.length;i++) { |
7 |
| - if (map.containsKey(nums[i])) { |
8 |
| - map.put(nums[i], map.get(nums[i])+1); |
9 |
| - } |
10 |
| - else { |
11 |
| - map.put(nums[i], 1); |
12 |
| - } |
13 |
| - } |
14 |
| - |
15 |
| - Map<Integer, Integer> sortedMap = sortByValue(map); |
16 |
| - |
17 |
| - List<Integer> ans = new ArrayList<>(); |
18 |
| - int c = 0; |
19 |
| - |
20 |
| - for (Map.Entry<Integer,Integer> entry : sortedMap.entrySet()) { |
21 |
| - if (c == k) break; |
22 |
| - ans.add(entry.getKey()); |
23 |
| - |
24 |
| - c++; |
25 |
| - } |
26 |
| - |
27 |
| - return ans; |
| 2 | + public int[] topKFrequent(int[] nums, int k) { |
| 3 | + Map<Integer, Integer> map = new HashMap<>(); |
| 4 | + for (int num : nums) { |
| 5 | + map.put(num, map.getOrDefault(num, 0) + 1); |
28 | 6 | }
|
29 |
| - |
30 |
| - private Map<Integer, Integer> sortByValue(Map<Integer, Integer> unsortMap) { |
31 |
| - |
32 |
| - List<Map.Entry<Integer, Integer>> list = |
33 |
| - new LinkedList<Map.Entry<Integer, Integer>>(unsortMap.entrySet()); |
34 |
| - |
35 |
| - Collections.sort(list, new Comparator<Map.Entry<Integer, Integer>>() { |
36 |
| - public int compare(Map.Entry<Integer, Integer> o1, |
37 |
| - Map.Entry<Integer, Integer> o2) { |
38 |
| - return (o2.getValue()).compareTo(o1.getValue()); |
39 |
| - } |
40 |
| - }); |
41 |
| - |
42 |
| - Map<Integer, Integer> sortedMap = new LinkedHashMap<Integer, Integer>(); |
43 |
| - for (Map.Entry<Integer, Integer> entry : list) { |
44 |
| - sortedMap.put(entry.getKey(), entry.getValue()); |
45 |
| - } |
46 |
| - |
47 |
| - return sortedMap; |
| 7 | + PriorityQueue<Integer> pq = new PriorityQueue<>(new Comparator<Integer>(){ |
| 8 | + public int compare(Integer p1, Integer p2) { |
| 9 | + return map.get(p1) - map.get(p2); |
| 10 | + } |
| 11 | + }); |
| 12 | + for (Integer key : map.keySet()) { |
| 13 | + pq.add(key); |
| 14 | + if (pq.size() > k) { |
| 15 | + pq.poll(); |
| 16 | + } |
48 | 17 | }
|
| 18 | + int[] ans = new int[k]; |
| 19 | + for (int i = 0; i < k; i++) { |
| 20 | + ans[i] = pq.poll(); |
| 21 | + } |
| 22 | + return ans; |
| 23 | + } |
49 | 24 | }
|
0 commit comments