File tree Expand file tree Collapse file tree 1 file changed +46
-0
lines changed
Expand file tree Collapse file tree 1 file changed +46
-0
lines changed Original file line number Diff line number Diff line change 1+ /*
2+ Sliding Window Median
3+ https://leetcode.com/problems/sliding-window-median/
4+ */
5+
6+ class Solution {
7+ PriorityQueue <Integer > maxHeap =new PriorityQueue <>(Collections .reverseOrder ());
8+ PriorityQueue <Integer > minHeap =new PriorityQueue <>();
9+
10+ public double [] medianSlidingWindow (int [] nums , int k ) {
11+ int i =0 ,j =0 ;
12+ double [] ans =new double [nums .length -k +1 ];
13+
14+ while (j <nums .length ){
15+ if (maxHeap .isEmpty () || maxHeap .peek ()>=nums [j ])
16+ maxHeap .offer (nums [j ]);
17+ else minHeap .offer (nums [j ]);
18+
19+ if (maxHeap .size ()>minHeap .size ()+1 )
20+ minHeap .offer (maxHeap .poll ());
21+ else if (maxHeap .size ()<minHeap .size ())
22+ maxHeap .offer (minHeap .poll ());
23+
24+ if (j -i +1 <k ) j ++;
25+ else if (j -i +1 ==k ){
26+ if (maxHeap .size ()==minHeap .size ())
27+ ans [i ]=maxHeap .peek ()/2.0 +minHeap .peek ()/2.0 ;
28+ else ans [i ]=maxHeap .peek ();
29+
30+ // remove ith element
31+ if (nums [i ]<=maxHeap .peek ())
32+ maxHeap .remove (nums [i ]);
33+ else minHeap .remove (nums [i ]);
34+
35+ if (maxHeap .size ()>minHeap .size ()+1 )
36+ minHeap .offer (maxHeap .poll ());
37+ else if (maxHeap .size ()<minHeap .size ())
38+ maxHeap .offer (minHeap .poll ());
39+
40+ i ++;j ++;
41+ }
42+ }
43+ return ans ;
44+ }
45+
46+ }
You can’t perform that action at this time.
0 commit comments