Skip to content

Commit d1503be

Browse files
Merge pull request codemistic#605 from Aarush2k1/patch-2
Sliding Window Median
2 parents e8c4e2b + 97beecd commit d1503be

File tree

1 file changed

+46
-0
lines changed

1 file changed

+46
-0
lines changed

Java/Leetcode/Leetcode 480.java

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

0 commit comments

Comments
 (0)