|
1 | 1 | package com.inuker.solution;
|
2 | 2 |
|
| 3 | +import java.util.ArrayList; |
3 | 4 | import java.util.Comparator;
|
4 | 5 | import java.util.HashMap;
|
5 | 6 | import java.util.LinkedList;
|
@@ -43,9 +44,32 @@ public int compare(Integer o1, Integer o2) {
|
43 | 44 | return list;
|
44 | 45 | }
|
45 | 46 |
|
| 47 | + public List<Integer> topKFrequent2(int[] nums, int k) { |
| 48 | + Map<Integer, Integer> map = new HashMap<>(); |
| 49 | + for(int n: nums){ |
| 50 | + map.put(n, map.getOrDefault(n,0)+1); |
| 51 | + } |
| 52 | + |
| 53 | + TreeMap<Integer, List<Integer>> freqMap = new TreeMap<>(); |
| 54 | + for(int num : map.keySet()){ |
| 55 | + int freq = map.get(num); |
| 56 | + if(!freqMap.containsKey(freq)){ |
| 57 | + freqMap.put(freq, new LinkedList<>()); |
| 58 | + } |
| 59 | + freqMap.get(freq).add(num); |
| 60 | + } |
| 61 | + |
| 62 | + List<Integer> res = new ArrayList<>(); |
| 63 | + while(res.size()<k){ |
| 64 | + Map.Entry<Integer, List<Integer>> entry = freqMap.pollLastEntry(); |
| 65 | + res.addAll(entry.getValue()); |
| 66 | + } |
| 67 | + return res; |
| 68 | + } |
| 69 | + |
46 | 70 | // 耗时23ms,时间复杂度O(n),空间复杂度O(n)
|
47 | 71 | // 这里有个问题,result的size可能大于k了
|
48 |
| - public List<Integer> topKFrequent2(int[] nums, int k) { |
| 72 | + public List<Integer> topKFrequent3(int[] nums, int k) { |
49 | 73 | Map<Integer, Integer> map = new HashMap<Integer, Integer>();
|
50 | 74 | int max = 0;
|
51 | 75 | for (int n : nums) {
|
|
0 commit comments