Given an array nums, there is a sliding window of size k which is moving from the very left of the array to the very right. You can only see the k numbers in the window. Each time the sliding window moves right by one position.
Java Solution
public int[] maxSlidingWindow(int[] nums, int k) { if(nums==null||nums.length==0) return new int[0]; int[] result = new int[nums.length-k+1]; LinkedList<Integer> deque = new LinkedList<Integer>(); for(int i=0; i<nums.length; i++){ if(!deque.isEmpty()&&deque.peekFirst()==i-k) deque.poll(); while(!deque.isEmpty()&&nums[deque.peekLast()]<nums[i]){ deque.removeLast(); } deque.offer(i); if(i+1>=k) result[i+1-k]=nums[deque.peek()]; } return result; } |
exist whole class of such ones
first/last/min/max neg/pos/zero in array for K size subarray
idea w/ deque is nice
keep only relevant Maxs , killing Maxs before ( max_prev < max_next), so sorted
and killing front Maxs in deque, if they are out of K positions
elegant , but obv no need add. memory
= find max for K first
= each next element , update Max if
if curr Max no more w/in k positions, again find max
var arr = [1,3,-1,-3,5,3,6,7]
var res = []
var k = 3
for(var i=k;i<=arr.length;i++){
res.push(Math.max(…arr.slice(i-k,i)))
}
console.log(res)
var arr = [1,3,-1,-3,5,3,6,7]
var res = []
var k = 3
for(var i=k;i<=arr.length;i++){
res.push(Math.max(...arr.slice(i-k,i)))
}
console.log(res)
Find the max in the sliding window. Or often called streaming maximum.
Hi
with test case nums = {4 2 5 3 4 2 10 2 11 15}, k = 3
maybe something incorrect
Leetcode accepted soluton is here:
https://github.com/ankit249/Algorithms/blob/master/src/com/ds/heap/SlidingWindowMaximum.java
Can someone add a better description for the question
PriorityQueue solution:
https://gist.github.com/hmny/94e285b834ed8ed34a8f6fbf29067981