File tree Expand file tree Collapse file tree 3 files changed +90
-0
lines changed
solution/0300-0399/0347.Top K Frequent Elements Expand file tree Collapse file tree 3 files changed +90
-0
lines changed Original file line number Diff line number Diff line change @@ -282,4 +282,39 @@ function topKFrequent(nums: number[], k: number): number[] {
282
282
283
283
<!-- solution: end -->
284
284
285
+ <!-- solution: start -->
286
+
287
+ ### Solution 3. Priority queue
288
+
289
+ <!-- tabs: start -->
290
+
291
+ #### TypeScript
292
+
293
+ ``` ts
294
+ function topKFrequent(nums : number [], k : number ): number [] {
295
+ const ans = Array <number >(k );
296
+ const cnt = new Map <number , number >();
297
+ const minPQ = new MinPriorityQueue ();
298
+
299
+ for (const x of nums ) {
300
+ cnt .set (x , (cnt .get (x ) ?? 0 ) + 1 );
301
+ }
302
+
303
+ for (const [x, c] of cnt ) {
304
+ minPQ .enqueue (x , c );
305
+ if (minPQ .size () > k ) minPQ .dequeue ();
306
+ }
307
+
308
+ while (k -- ) {
309
+ ans [k ] = minPQ .dequeue ().element ;
310
+ }
311
+
312
+ return ans ;
313
+ }
314
+ ```
315
+
316
+ <!-- tabs: end -->
317
+
318
+ <!-- solution: end -->
319
+
285
320
<!-- problem: end -->
Original file line number Diff line number Diff line change @@ -270,4 +270,39 @@ function topKFrequent(nums: number[], k: number): number[] {
270
270
271
271
<!-- solution: end -->
272
272
273
+ <!-- solution: start -->
274
+
275
+ ### Solution 3. Priority queue
276
+
277
+ <!-- tabs: start -->
278
+
279
+ #### TypeScript
280
+
281
+ ``` ts
282
+ function topKFrequent(nums : number [], k : number ): number [] {
283
+ const ans = Array <number >(k );
284
+ const cnt = new Map <number , number >();
285
+ const minPQ = new MinPriorityQueue ();
286
+
287
+ for (const x of nums ) {
288
+ cnt .set (x , (cnt .get (x ) ?? 0 ) + 1 );
289
+ }
290
+
291
+ for (const [x, c] of cnt ) {
292
+ minPQ .enqueue (x , c );
293
+ if (minPQ .size () > k ) minPQ .dequeue ();
294
+ }
295
+
296
+ while (k -- ) {
297
+ ans [k ] = minPQ .dequeue ().element ;
298
+ }
299
+
300
+ return ans ;
301
+ }
302
+ ```
303
+
304
+ <!-- tabs: end -->
305
+
306
+ <!-- solution: end -->
307
+
273
308
<!-- problem: end -->
Original file line number Diff line number Diff line change
1
+ function topKFrequent ( nums : number [ ] , k : number ) : number [ ] {
2
+ const ans = Array < number > ( k ) ;
3
+ const cnt = new Map < number , number > ( ) ;
4
+ const minPQ = new MinPriorityQueue ( ) ;
5
+
6
+ for ( const x of nums ) {
7
+ cnt . set ( x , ( cnt . get ( x ) ?? 0 ) + 1 ) ;
8
+ }
9
+
10
+ for ( const [ x , c ] of cnt ) {
11
+ minPQ . enqueue ( x , c ) ;
12
+ if ( minPQ . size ( ) > k ) minPQ . dequeue ( ) ;
13
+ }
14
+
15
+ while ( k -- ) {
16
+ ans [ k ] = minPQ . dequeue ( ) . element ;
17
+ }
18
+
19
+ return ans ;
20
+ }
You can’t perform that action at this time.
0 commit comments