# 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.

 public class Solution
{
public int[] MaxSlidingWindow(int[] nums, int k)
{
if (nums.Length == 0)
return new int[]{};
if (k == 1)
return nums;
int[] ret = new int[nums.Length - k + 1];
ret[0] = help(nums, k, 0);
for (int i = k; i < nums.Length; i++)
{
if (ret[i - k] <= nums[i])
ret[i - k + 1] = nums[i];
else
ret[i - k + 1] = help(nums, k, i - k + 1);
}
return ret;
}
public int help(int[] nums, int k, int begin)
{
int max = nums[begin];
for (int i = begin; i <= begin + k - 1; i++)
{
max = max >= nums[i] ? max : nums[i];
}
return max;
}
}

 public class Solution
{
public int[] MaxSlidingWindow(int[] nums, int k)
{
if (k == 0) return new int[0];
LinkedList<int> q = new LinkedList<int>();//定义一个双端队列q，q里存储的时元素的索引，并非元素本身。
int[] res = new int[nums.Length - k + 1];//存储结果
for (int i = 0; i < nums.Length; i++)
{
//元素的索引 i 入队之前，将比nums[i]小的所有元素的索引在队列中删除，这样可以保证队列中的元素索引所指的数组对应元素是按照降序排列。
while (q.Count != 0 && nums[i] >= nums[q.Last()])
{
q.RemoveLast();
}
q.AddLast(i);//每个元素的索引都会在队列的末尾入队，保证入队的索引是升序排列
//当前索引 i 与队列中第一个索引的差如果大于k，说明当前队列里的元素个数超过窗口大小，需要删除元素，因为索引是顺序入队的，所以第一个元素就是要删除的元素。
if (i - q.First() + 1 > k)

{
q.RemoveFirst();
}
//在 i -k +1 =0 开始对res赋值。
if (i + 1 >= k) res[i - k + 1] = nums[q.First()];
}
return res;
}
}

• 本文已收录于以下专栏：

## leetcode 239: Sliding Window Maximum

leetcode 239: Sliding Window Maximum python c++ java
• xudli
• 2015年07月19日 15:41
• 8708

## LeetCode 239. Sliding Window Maximum（滑动窗口最大值）

• jmspan
• 2016年04月06日 12:53
• 1721

## [python]leetcode(239). Sliding Window Maximum

problem Given an array nums, there is a sliding window of size k which is moving from the very ...
• PKU_Jade
• 2017年09月11日 16:30
• 119

## 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 a...
• m0_37693059
• 2017年09月04日 15:25
• 183

## 239. Sliding Window Maximum&滑动窗口的最大值

• sjt091110317
• 2016年02月26日 17:02
• 365

## LeetCode：Sliding Window Maximum 题解 Python

LeetCode：Sliding Window Maximum 题解 Python
• soiliml
• 2015年08月19日 15:51
• 507

## windows系统socket泄露问题解决--No buffer space available (maximum connections reached?): JVM_Bind

• yzy199391
• 2017年12月27日 13:50
• 157

## Leetcode 480. Sliding Window Median 滑动窗口中的中位数 解题报告

1 解题思想题目会给一个数组，和一个滑动窗口的大小K，让你找出当这个窗口滑动的过程中，这个K的窗口内的中位数分别是多少？最naive的方式就是在k个窗口内排序就好，这里不解释（因为开销很大啊，(n-k...
• MebiuW
• 2017年01月13日 15:11
• 2815

## leetcode-Sliding Window Maximum

Total Accepted: 14811 Total Submissions: 62176 Difficulty: Hard Given an array nums, there is...
• ljlstart
• 2015年11月03日 23:26
• 193

## 【leetCode】Sliding Window Maximum

• XiaYiZhanQiHang
• 2016年10月29日 12:45
• 125

举报原因： 您举报文章：Leetcode-239-Sliding Window Maximum 色情 政治 抄袭 广告 招聘 骂人 其他 (最多只允许输入30个字)