目录
一【题目描述】
二【题目样例】
三【解题思路】
自己的写法比较麻烦,还得单独考虑边界值的情况(装一个判断一个)
参考解法二学习思想(先统一装进数组里,比较中记录左端点和右端点,都找到后,直接按【,】形式输出)
四【代码实现】
解法一:自己写的 比较麻烦
#include<iostream>
#include<cstdio>
using namespace std;
int main(){
int n,t;
scanf("%d %d",&n,&t);
int flag1=0;//指是否有超过阈值的
int flag2=0;//指是否正在输出区间
int max=0;
for(int i=0;i<n;i++){
int y;
scanf("%d",&y);
if(y>max) max=y;
if(y>t&&flag2==0) {
flag2=1;
printf("[%d,",i);
flag1=1;
}
if(flag2==1&&y<=t){
printf("%d]\n",i-1);
flag2=0;
}
//边界条件 ,当最后一个也超过阈值时
if(i==n-1&&y>t&&flag2==1){
printf(" %d]\n",i);
}
if(i==n-1&&y>t&&flag2==0){
flag1=0;
printf("[%d, %d]\n",i,i);
}
}
if(flag1==0) printf("%d",max);
}
解法二:
#include<iostream>
#include<cstdio>
using namespace std;
int main(){
int n,t;
scanf("%d %d",&n,&t);
int a[10001];
int flag=0;//指是否有超过阈值的
int max=0;
for(int i=0;i<n;i++){
scanf("%d",&a[i]);
if(a[i]>max) max=a[i];
}
int left,right;
for(int i=0;i<n;i++){
if(a[i]>t&&a[i-1]<=t)left=i;
if(a[i]>t&&a[i+1]<=t){ //这里的逻辑很重要,找到右端点 就是这组输入完了
//假设最后一个数也超过阈值,因为初始时候a[n]=0,也符合条件2 不必再讨论
right=i;
printf("[%d, %d]\n",left,right);
right=0;left=0;
flag=1;
}
}
if(flag==0) printf("%d",max);
}