Leetcode 239: Sliding Window Maximum
Given an array nums, there is a sliding window of size k which is moving from the very left of the array to the very right. You can only see the k numbers in the window. Each time the sliding window moves right by one position.
For example,
Given nums = [1,3,-1,-3,5,3,6,7], and k = 3.
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
Therefore, return the max sliding window as [3,3,5,5,6,7].
Note:
You may assume k is always valid, ie: 1 ≤ k ≤ input array's size for non-empty array.
Follow up:
Could you solve it in linear time?
1 public class Solution { 2 public int[] MaxSlidingWindow(int[] nums, int k) { 3 int len = nums.Length; 4 if (len == 0 || len < k) return new int[0]; 5 6 var result = new int[len - k + 1]; 7 var window = new List<int>(k); 8 9 for (int i = 0; i < len; i++) 10 { 11 while (window.Count > 0 && i - window[0] >= k) 12 { 13 window.RemoveAt(0); 14 } 15 16 while (window.Count >0 && nums[i] > nums[window[window.Count - 1]]) 17 { 18 window.RemoveAt(window.Count - 1); 19 } 20 21 window.Add(i); 22 23 if (i >= k - 1) 24 { 25 result[i - k + 1] = nums[window[0]]; 26 } 27 } 28 29 return result; 30 } 31 }

浙公网安备 33010602011771号