https://leetcode.com/problems/sliding-window-maximum/
- Sliding Window
- Deque
Use deque to maintain decreasing order of elements; pop from front when out of window.
O(n)
O(n)
import java.util.*;
class Solution {
public int[] maxSlidingWindow(int[] nums, int k) {
Deque<Integer> deque = new ArrayDeque<>();
int[] result = new int[nums.length - k + 1];
for (int i = 0; i < nums.length; i++) {
while (!deque.isEmpty() && deque.peekFirst() < i - k + 1) deque.pollFirst();
while (!deque.isEmpty() && nums[deque.peekLast()] <= nums[i]) deque.pollLast();
deque.addLast(i);
if (i >= k - 1) result[i - k + 1] = nums[deque.peekFirst()];
}
return result;
}
}