Sliding Window Maximum

💡Strategies for Solving This Problem

Understanding Sliding Window Maximum

Given an array and a window size k, find the maximum value in each window as it slides from left to right. This is a classic problem testing understanding of deques and optimization techniques.

Problem Statement

Input: nums = [1,3,-1,-3,5,3,6,7], k = 3

Output: [3,3,5,5,6,7]

Window position                Max
---------------               -----
[1  3  -1] -3  5  3  6  7      3
 1 [3  -1  -3] 5  3  6  7      3
 1  3 [-1  -3  5] 3  6  7      5
 1  3  -1 [-3  5  3] 6  7      5
 1  3  -1  -3 [5  3  6] 7      6
 1  3  -1  -3  5 [3  6  7]     7

Naive Approach: O(nk)

For each window, scan all k elements to find max. Too slow for large inputs.


def max_sliding_window_naive(nums, k):
    result = []
    for i in range(len(nums) - k + 1):
        window_max = max(nums[i:i+k])
        result.append(window_max)
    return result
# Time: O(n*k), Space: O(1)

Better Approach: Max Heap - O(n log k)

Use max heap to track window maximum. Remove old elements as window slides.

Issue: Heap doesn't support efficient removal of arbitrary elements. Need to track indices.

Optimal: Monotonic Deque - O(n)

Key Insight: If element A enters before element B, and A ≤ B, then A can never be the maximum while B is in the window.

Strategy:

  • Maintain deque of indices in decreasing order of values
  • Front of deque always holds index of current maximum
  • Remove indices outside current window
  • Remove indices with smaller values than current element (they can't be max)

Why Deque?

  • O(1) access to both ends
  • Can remove from both front (old elements) and back (smaller elements)
  • Perfect for maintaining order while sliding

Asked at: Amazon, Google, Microsoft, Facebook, Bloomberg

Scroll to Top