File tree Expand file tree Collapse file tree 1 file changed +53
-0
lines changed Expand file tree Collapse file tree 1 file changed +53
-0
lines changed Original file line number Diff line number Diff line change 1+ class  Solution  {
2+  public  double [] medianSlidingWindow (int [] nums , int  k ) {
3+  if  (nums  == null  || nums .length  == 0 ) {
4+  return  new  double [] {};
5+  }
6+ 
7+  MedianQueue  mq  = new  MedianQueue ();
8+  double [] result  = new  double [nums .length  - k  + 1 ];
9+  int  idx  = 0 ;
10+ 
11+  for  (int  i  = 0 ; i  < nums .length ; i ++) {
12+  mq .offer (nums [i ]);
13+ 
14+  if  (mq .size () == k ) {
15+  result [idx ++] = mq .getMedian ();
16+  mq .remove (nums [i  + 1  - k ]);
17+  }
18+  }
19+ 
20+  return  result ;
21+  }
22+ 
23+  class  MedianQueue  {
24+  private  PriorityQueue <Integer > maxHeap ;
25+  private  PriorityQueue <Integer > minHeap ;
26+ 
27+  public  MedianQueue () {
28+  maxHeap  = new  PriorityQueue <>();
29+  minHeap  = new  PriorityQueue <>(Collections .reverseOrder ());
30+  }
31+ 
32+  public  void  offer (int  num ) {
33+  maxHeap .offer (num );
34+  minHeap .offer (maxHeap .poll ());
35+ 
36+  if  (maxHeap .size () < minHeap .size ()) {
37+  maxHeap .offer (minHeap .poll ());
38+  }
39+  }
40+ 
41+  public  boolean  remove (int  num ) {
42+  return  maxHeap .remove (num ) || minHeap .remove (num );
43+  }
44+ 
45+  public  int  size () {
46+  return  maxHeap .size () + minHeap .size ();
47+  }
48+ 
49+  public  double  getMedian () {
50+  return  maxHeap .size () > minHeap .size () ? maxHeap .peek () : ((long ) maxHeap .peek () + minHeap .peek ()) / 2.0 ;
51+  }
52+  }
53+ }
                                 You can’t perform that action at this time. 
               
                  
0 commit comments