@@ -48,39 +48,74 @@ Note that "i" comes before "love" due to a lower alphabetica
48
48
``` python
49
49
class Solution :
50
50
def topKFrequent (self , words : List[str ], k : int ) -> List[str ]:
51
- counter = Counter(words)
52
- res = sorted (counter, key = lambda word : (- counter[word], word))
53
- return res[:k]
51
+ cnt = Counter(words)
52
+ return sorted (cnt, key = lambda x : (- cnt[x], x))[:k]
54
53
```
55
54
56
55
### ** Java**
57
56
58
57
``` java
59
58
class Solution {
60
59
public List<String > topKFrequent (String [] words , int k ) {
61
- Map<String , Integer > counter = new HashMap<> ();
62
- for (String word : words) {
63
- counter . put(word, counter . getOrDefault(word , 0 ) + 1 );
60
+ Map<String , Integer > cnt = new HashMap<> ();
61
+ for (String v : words) {
62
+ cnt . put(v, cnt . getOrDefault(v , 0 ) + 1 );
64
63
}
65
- PriorityQueue<String > minHeap = new PriorityQueue<> ((a, b) - > {
66
- if (counter. get(a). equals(counter. get(b))) {
67
- return b. compareTo(a);
68
- }
69
- return counter. get(a) - counter. get(b);
64
+ PriorityQueue<String > q = new PriorityQueue<> ((a, b) - > {
65
+ int d = cnt. get(a) - cnt. get(b);
66
+ return d == 0 ? b. compareTo(a) : d;
70
67
});
71
- for (String word : counter . keySet()) {
72
- minHeap . offer(word );
73
- if (minHeap . size() > k) {
74
- minHeap . poll();
68
+ for (String v : cnt . keySet()) {
69
+ q . offer(v );
70
+ if (q . size() > k) {
71
+ q . poll();
75
72
}
76
73
}
77
- List <String > res = new ArrayList <> ();
78
- while (! minHeap . isEmpty()) {
79
- res . add(minHeap . poll());
74
+ LinkedList <String > ans = new LinkedList <> ();
75
+ while (! q . isEmpty()) {
76
+ ans . addFirst(q . poll());
80
77
}
81
- Collections . reverse(res);
82
- return res;
78
+ return ans;
79
+ }
80
+ }
81
+ ```
82
+
83
+ ### ** C++**
84
+
85
+ ``` cpp
86
+ class Solution {
87
+ public:
88
+ vector<string > topKFrequent(vector<string >& words, int k) {
89
+ unordered_map<string, int> cnt;
90
+ for (auto& v : words) ++cnt[ v] ;
91
+ vector<string > ans;
92
+ for (auto& [ key, _ ] : cnt) ans.emplace_back(key);
93
+ sort(ans.begin(), ans.end(), [ &] (const string& a, const string& b) -> bool {
94
+ return cnt[ a] == cnt[ b] ? a < b : cnt[ a] > cnt[ b] ;
95
+ });
96
+ ans.erase(ans.begin() + k, ans.end());
97
+ return ans;
83
98
}
99
+ };
100
+ ```
101
+
102
+ ### **Go**
103
+
104
+ ```go
105
+ func topKFrequent(words []string, k int) []string {
106
+ cnt := map[string]int{}
107
+ for _, v := range words {
108
+ cnt[v]++
109
+ }
110
+ ans := []string{}
111
+ for v := range cnt {
112
+ ans = append(ans, v)
113
+ }
114
+ sort.Slice(ans, func(i, j int) bool {
115
+ a, b := ans[i], ans[j]
116
+ return cnt[a] > cnt[b] || cnt[a] == cnt[b] && a < b
117
+ })
118
+ return ans[:k]
84
119
}
85
120
```
86
121
0 commit comments