AlgoMaster Logo

Sliding Window Maximum

nums=[1, 3, -1, -3, 5, 3, 6, 7],k=3
1public int[] maxSlidingWindow(int[] nums, int k) {
2    Deque<Integer> deque = new ArrayDeque<>();
3    List<Integer> resultList = new ArrayList<>();
4
5    for (int i = 0; i < nums.length; i++) {
6        // Remove elements outside window
7        if (!deque.isEmpty() && deque.peekFirst() <= i - k) {
8            deque.pollFirst();
9        }
10
11        // Remove smaller elements from back
12        while (!deque.isEmpty() && nums[deque.peekLast()] <= nums[i]) {
13            deque.pollLast();
14        }
15
16        // Add current index
17        deque.offerLast(i);
18
19        // Add to result if window complete
20        if (i >= k - 1) {
21            resultList.add(nums[deque.peekFirst()]);
22        }
23    }
24
25    return resultList.stream().mapToInt(Integer::intValue).toArray();
26}
0 / 31
nums01132-13-345536677dequeresult