File tree Expand file tree Collapse file tree 3 files changed +99
-0
lines changed
solution/0200-0299/0295.Find Median from Data Stream Expand file tree Collapse file tree 3 files changed +99
-0
lines changed Original file line number Diff line number Diff line change @@ -422,4 +422,42 @@ public class MedianFinder {
422
422
423
423
<!-- solution:end -->
424
424
425
+ <!-- solution:start -->
426
+
427
+ ### Solution 2. Min/max heaps
428
+
429
+ <!-- tabs:start -->
430
+
431
+ #### TypeScript
432
+
433
+ ``` ts
434
+ class MedianFinder {
435
+ #minQ = new MinPriorityQueue <number >();
436
+ #maxQ = new MaxPriorityQueue <number >();
437
+
438
+ addNum(num : number ): void {
439
+ const [minQ, maxQ] = [this .#minQ , this .#maxQ ];
440
+ maxQ .enqueue (num );
441
+ minQ .enqueue (maxQ .dequeue ().element );
442
+ if (minQ .size () > maxQ .size ()) {
443
+ maxQ .enqueue (minQ .dequeue ().element );
444
+ }
445
+ }
446
+
447
+ findMedian(): number {
448
+ const [minQ, maxQ] = [this .#minQ , this .#maxQ ];
449
+ const median =
450
+ maxQ .size () === minQ .size ()
451
+ ? (maxQ .front ().element + minQ .front ().element ) / 2
452
+ : maxQ .front ().element ;
453
+
454
+ return median ;
455
+ }
456
+ }
457
+ ```
458
+
459
+ <!-- tabs:end -->
460
+
461
+ <!-- solution:end -->
462
+
425
463
<!-- problem:end -->
Original file line number Diff line number Diff line change @@ -417,4 +417,42 @@ public class MedianFinder {
417
417
418
418
<!-- solution:end -->
419
419
420
+ <!-- solution:start -->
421
+
422
+ ### Solution 2. Min/max heaps
423
+
424
+ <!-- tabs:start -->
425
+
426
+ #### TypeScript
427
+
428
+ ``` ts
429
+ class MedianFinder {
430
+ #minQ = new MinPriorityQueue <number >();
431
+ #maxQ = new MaxPriorityQueue <number >();
432
+
433
+ addNum(num : number ): void {
434
+ const [minQ, maxQ] = [this .#minQ , this .#maxQ ];
435
+ maxQ .enqueue (num );
436
+ minQ .enqueue (maxQ .dequeue ().element );
437
+ if (minQ .size () > maxQ .size ()) {
438
+ maxQ .enqueue (minQ .dequeue ().element );
439
+ }
440
+ }
441
+
442
+ findMedian(): number {
443
+ const [minQ, maxQ] = [this .#minQ , this .#maxQ ];
444
+ const median =
445
+ maxQ .size () === minQ .size ()
446
+ ? (maxQ .front ().element + minQ .front ().element ) / 2
447
+ : maxQ .front ().element ;
448
+
449
+ return median ;
450
+ }
451
+ }
452
+ ```
453
+
454
+ <!-- tabs:end -->
455
+
456
+ <!-- solution:end -->
457
+
420
458
<!-- problem:end -->
Original file line number Diff line number Diff line change
1
+ class MedianFinder {
2
+ #minQ = new MinPriorityQueue < number > ( ) ;
3
+ #maxQ = new MaxPriorityQueue < number > ( ) ;
4
+
5
+ addNum ( num : number ) : void {
6
+ const [ minQ , maxQ ] = [ this . #minQ, this . #maxQ] ;
7
+ maxQ . enqueue ( num ) ;
8
+ minQ . enqueue ( maxQ . dequeue ( ) . element ) ;
9
+ if ( minQ . size ( ) > maxQ . size ( ) ) {
10
+ maxQ . enqueue ( minQ . dequeue ( ) . element ) ;
11
+ }
12
+ }
13
+
14
+ findMedian ( ) : number {
15
+ const [ minQ , maxQ ] = [ this . #minQ, this . #maxQ] ;
16
+ const median =
17
+ maxQ . size ( ) === minQ . size ( )
18
+ ? ( maxQ . front ( ) . element + minQ . front ( ) . element ) / 2
19
+ : maxQ . front ( ) . element ;
20
+
21
+ return median ;
22
+ }
23
+ }
You can’t perform that action at this time.
0 commit comments