Skip to content

Commit 50e0c1d

Browse files
Sean PrashadSean Prashad
authored andcommitted
Add 480_Sliding_Window_Median.java
1 parent a5a5037 commit 50e0c1d

File tree

1 file changed

+53
-0
lines changed

1 file changed

+53
-0
lines changed
Lines changed: 53 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,53 @@
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+
}

0 commit comments

Comments
 (0)