第一行输入两个整数
。
第二行输入
个整数
,元素范围
。
输出共
个整数,为每个滑动窗口的最大值,数之间以单个空格分隔。
10 3 2 13 6 19 15 13 17 9 19 13
13 19 19 19 17 17 19 19
10 1 13 13 5 3 9 19 18 4 17 3
13 13 5 3 9 19 18 4 17 3
10 10 15 20 5 20 19 1 4 18 14 15
20
import java.util.*;
import java.io.*;
// 注意类名必须为 Main, 不要有任何 package xxx 信息
public class Main {
public static void main(String[] args) throws IOException {
BufferedReader bf=new BufferedReader(new InputStreamReader(System.in));
String[] lineone=bf.readLine().split(" ");
String[] linetwo=bf.readLine().split(" ");
int n=Integer.parseInt(lineone[0]),k=Integer.parseInt(lineone[1]);
int[] arr=Arrays.stream(linetwo).mapToInt(Integer::parseInt).toArray();
Deque<Integer> dq=new LinkedList<>();//维护单调队列
StringJoiner sj=new StringJoiner(" ");
for(int i=0;i<n;i++){
//单调递减
while(!dq.isEmpty()&&arr[dq.peekLast()]<=arr[i]){
dq.pollLast();//队尾安全出队
}
dq.offerLast(i);
//如果队首划过窗口则移除
if(dq.peekFirst()<=i-k){
dq.pollFirst();
}
//够窗口大小时收集元素
if(i>=k-1){
sj.add(arr[dq.peekFirst()]+"");
}
}
System.out.println(sj.toString());
}
}