解题思路:使用数组模拟队列
注意事项:没有使用STL,避免超时
参考代码:
#include<iostream>
#include<algorithm>
using namespace std;
const int N = 1000010;
int n,k;
int a[N],q[N];
int main(){
cin>>n>>k;
for(int i=0;i<n;i++){
scanf("%d",&a[i]);
}
int hh=0,tt=-1;
for(int i=0;i<n;i++){
if(hh<=tt && i-k+1>q[hh]) hh++;
while(hh<=tt &&a[q[tt]]>=a[i]) tt--;
q[++tt]=i;
if(i>=k-1) printf("%d ",a[q[hh]]);
}
puts("");
hh=0,tt=-1;
for(int i=0;i<n;i++){
if(hh<=tt && i-k+1>q[hh]) hh++;
while(hh<=tt &&a[q[tt]]<=a[i]) tt--;
q[++tt]=i;
if(i>=k-1) printf("%d ",a[q[hh]]);
}
puts("");
return 0;
}
0.0分
1 人评分
C语言训练-计算1977!* (C++代码)浏览:907 |
WU-复数求和 (C++代码)浏览:2119 |
WU-C语言程序设计教程(第三版)课后习题11.11 (C++代码)(想学链表的可以看看)浏览:1464 |
【绝对值排序】 (C语言代码)浏览:892 |
C语言程序设计教程(第三版)课后习题5.7 (C语言代码)浏览:416 |
数列排序 (C语言代码)浏览:674 |
母牛的故事 (C语言代码)浏览:625 |
拆分位数 (C语言代码)浏览:558 |
汽水瓶 (C语言代码)浏览:579 |
C语言程序设计教程(第三版)课后习题3.7 (C语言代码)浏览:620 |