Sliding Window Maximum

Problem Statement

Given an array and window size k, find the maximum value in each sliding window of size k.

Example: nums = [1,3,-1,-3,5,3,6,7], k=3 → Output: [3,3,5,5,6,7]

Approach 1: Brute Force

Explanation: For each window, scan all elements to find maximum.

Time Complexity: O(n*k)

Space Complexity: O(n) for output

result = []
for i in 0..n-k:
    max_val = max(nums[i..i+k-1])
    result.append(max_val)
return result
      

Approach 2: Using Deque (Better)

Explanation: Maintain deque of indices in decreasing order; front is max.

Time Complexity: O(n)

Space Complexity: O(k)

deque = empty
result = []
for i in 0..n-1:
    while deque not empty and nums[deque[-1]] < nums[i]:
        deque.pop()
    deque.push(i)
    if deque[0] == i-k:
        deque.popleft()
    if i >= k-1:
        result.append(nums[deque[0]])
return result
      

Approach 3: Max-Heap (Alternative)

Explanation: Keep a max-heap of window elements.

Time Complexity: O(n log k)

Space Complexity: O(k)

heap = max-heap of first k elements
result = [heap.max()]
for i in k..n-1:
    remove nums[i-k] from heap
    insert nums[i] into heap
    result.append(heap.max())
return result