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