题目描述
给你一个长度为N的数组,一个长为K的滑动窗体从最左端移至最右端,你只能看到窗口中的K个数,每次窗体向右移动一位,如下表所示:
窗口位置
|
最小值
|
最大值
|
[ 1 3 -1 ] -3 5 3 6 7
|
-1
|
3
|
1 [ 3 -1 -3 ] 5 3 6 7
|
-3
|
3
|
1 3 [ -1 -3 5 ] 3 6 7
|
-3
|
5
|
1 3 -1 [ -3 5 3 ] 6 7
|
-3
|
5
|
1 3 -1 -3 [ 5 3 6 ] 7
|
3
|
6
|
1 3 -1 -3 5 [ 3 6 7 ]
|
3
|
7
|
你的任务是找出窗体在各个位置时的最大值和最小值。
输入
第一行:两个整数N和K
第二行:N个整数,表示数组的N个元素(<=2×109)。
输出
第一行为滑动窗口从左向右移动到每个位置时的最小值,每个数之间用一个空格分开。
第二行为滑动窗口从左向右移动到每个位置时的最大值,每个数之间用一个空格分开。
-1 -3 -3 -3 3 3
3 3 5 5 6 7
提示
对于20%的数据,K<=N<=1000。
对于50%的数据,K<=N<=100000。
对于100%的数据,K<=N<=1000000。
思路:
方法一:朴素算法直接扫描
方法二:线段树或RMQ
方法三:单调队列