File tree 4 files changed +94
-14
lines changed
solution/0600-0699/0692.Top K Frequent Words
4 files changed +94
-14
lines changed Original file line number Diff line number Diff line change 1
- # [ 692. 前K个高频单词 ] ( https://leetcode-cn.com/problems/top-k-frequent-words )
1
+ # [ 692. 前 K 个高频单词 ] ( https://leetcode-cn.com/problems/top-k-frequent-words )
2
2
3
3
[ English Version] ( /solution/0600-0699/0692.Top%20K%20Frequent%20Words/README_EN.md )
4
4
47
47
<li>尝试以 <em>O</em>(<em>n</em> log <em>k</em>) 时间复杂度和 <em>O</em>(<em>n</em>) 空间复杂度解决。</li>
48
48
</ol >
49
49
50
-
51
50
## 解法
52
51
53
52
<!-- 这里可写通用的实现逻辑 -->
59
58
<!-- 这里可写当前语言的特殊实现逻辑 -->
60
59
61
60
``` python
62
-
61
+ class Solution :
62
+ def topKFrequent (self , words : List[str ], k : int ) -> List[str ]:
63
+ counter = collections.Counter(words)
64
+ res = sorted (counter, key = lambda word : (- counter[word], word))
65
+ return res[:k]
63
66
```
64
67
65
68
### ** Java**
66
69
67
70
<!-- 这里可写当前语言的特殊实现逻辑 -->
68
71
69
72
``` java
70
-
73
+ class Solution {
74
+ public List<String > topKFrequent (String [] words , int k ) {
75
+ Map<String , Integer > counter = new HashMap<> ();
76
+ for (String word : words) {
77
+ counter. put(word, counter. getOrDefault(word, 0 ) + 1 );
78
+ }
79
+ PriorityQueue<String > minHeap = new PriorityQueue<> ((a, b) - > {
80
+ if (counter. get(a). equals(counter. get(b))) {
81
+ return b. compareTo(a);
82
+ }
83
+ return counter. get(a) - counter. get(b);
84
+ });
85
+ for (String word : counter. keySet()) {
86
+ minHeap. offer(word);
87
+ if (minHeap. size() > k) {
88
+ minHeap. poll();
89
+ }
90
+ }
91
+ List<String > res = new ArrayList<> ();
92
+ while (! minHeap. isEmpty()) {
93
+ res. add(minHeap. poll());
94
+ }
95
+ Collections . reverse(res);
96
+ return res;
97
+ }
98
+ }
71
99
```
72
100
73
101
### ** ...**
Original file line number Diff line number Diff line change 8
8
9
9
<p >Your answer should be sorted by frequency from highest to lowest. If two words have the same frequency, then the word with the lower alphabetical order comes first.</p >
10
10
11
-
12
-
13
11
<p ><b >Example 1:</b ><br />
14
12
15
13
<pre >
26
24
27
25
</p >
28
26
29
-
30
-
31
27
<p ><b >Example 2:</b ><br />
32
28
33
29
<pre >
44
40
45
41
</p >
46
42
47
-
48
-
49
43
<p ><b >Note:</b ><br >
50
44
51
45
<ol >
58
52
59
53
</p >
60
54
61
-
62
-
63
55
<p ><b >Follow up:</b ><br />
64
56
65
57
<ol >
77
69
### ** Python3**
78
70
79
71
``` python
80
-
72
+ class Solution :
73
+ def topKFrequent (self , words : List[str ], k : int ) -> List[str ]:
74
+ counter = collections.Counter(words)
75
+ res = sorted (counter, key = lambda word : (- counter[word], word))
76
+ return res[:k]
81
77
```
82
78
83
79
### ** Java**
84
80
85
81
``` java
86
-
82
+ class Solution {
83
+ public List<String > topKFrequent (String [] words , int k ) {
84
+ Map<String , Integer > counter = new HashMap<> ();
85
+ for (String word : words) {
86
+ counter. put(word, counter. getOrDefault(word, 0 ) + 1 );
87
+ }
88
+ PriorityQueue<String > minHeap = new PriorityQueue<> ((a, b) - > {
89
+ if (counter. get(a). equals(counter. get(b))) {
90
+ return b. compareTo(a);
91
+ }
92
+ return counter. get(a) - counter. get(b);
93
+ });
94
+ for (String word : counter. keySet()) {
95
+ minHeap. offer(word);
96
+ if (minHeap. size() > k) {
97
+ minHeap. poll();
98
+ }
99
+ }
100
+ List<String > res = new ArrayList<> ();
101
+ while (! minHeap. isEmpty()) {
102
+ res. add(minHeap. poll());
103
+ }
104
+ Collections . reverse(res);
105
+ return res;
106
+ }
107
+ }
87
108
```
88
109
89
110
### ** ...**
Original file line number Diff line number Diff line change
1
+ class Solution {
2
+ public List <String > topKFrequent (String [] words , int k ) {
3
+ Map <String , Integer > counter = new HashMap <>();
4
+ for (String word : words ) {
5
+ counter .put (word , counter .getOrDefault (word , 0 ) + 1 );
6
+ }
7
+ PriorityQueue <String > minHeap = new PriorityQueue <>((a , b ) -> {
8
+ if (counter .get (a ).equals (counter .get (b ))) {
9
+ return b .compareTo (a );
10
+ }
11
+ return counter .get (a ) - counter .get (b );
12
+ });
13
+ for (String word : counter .keySet ()) {
14
+ minHeap .offer (word );
15
+ if (minHeap .size () > k ) {
16
+ minHeap .poll ();
17
+ }
18
+ }
19
+ List <String > res = new ArrayList <>();
20
+ while (!minHeap .isEmpty ()) {
21
+ res .add (minHeap .poll ());
22
+ }
23
+ Collections .reverse (res );
24
+ return res ;
25
+ }
26
+ }
Original file line number Diff line number Diff line change
1
+ class Solution :
2
+ def topKFrequent (self , words : List [str ], k : int ) -> List [str ]:
3
+ counter = collections .Counter (words )
4
+ res = sorted (counter , key = lambda word : (- counter [word ], word ))
5
+ return res [:k ]
You can’t perform that action at this time.
0 commit comments