Here's the solution:
function maxSlidingWindow(nums, k)
n := length of nums
deque := empty deque // stores indices
result := empty array
for i from 0 to n - 1
// Remove indices outside current window
while deque is not empty and front of deque < i - k + 1
pop front from deque
// Maintain decreasing order
while deque is not empty and nums[i] >= nums[back of deque]
pop back from deque
push i to back of deque
// Window is full, record maximum
if i >= k - 1
append nums[front of deque] to result
return result
Time: . Space: .