单峰数组c++捏-创新互联
题目在这里捏:
创新互联建站:成立与2013年为各行业开拓出企业自己的“网站建设”服务,为数千家公司企业提供了专业的成都网站建设、做网站、网页设计和网站推广服务, 按需网站制作由设计师亲自精心设计,设计的效果完全按照客户的要求,并适当的提出合理的建议,拥有的视觉效果,策划师分析客户的同行竞争对手,根据客户的实际情况给出合理的网站构架,制作客户同行业具有领先地位的。整数数组如果是单峰的,满足:
·第一部分一开始就在严格增加
·第二部分此后它是恒定的
·此后第三部分,它将严格降低
第一个部分(增加)和最后一部分(减少)可能不存在。允许这两部分不存在。
例如,以下三个数组是单峰的:[5,7,11,11,2,1],[4,4,2],[7],但以下三个数组不是单峰的:[5,5,6,6,1],[1,2,1,2],[4,5,5,6]。
编写一个程序,检查数组是否是单峰的。
测试数据
样例输入1:
6
1 5 5 5 4 2
样例输出1:
YES
样例输入2:
5
10 20 30 20 10
样例输出2:
YES
样例输入3:
4
1 2 1 2
样例输出3:
NO
样例输入4:
7
3 3 3 3 3 3 3
样例输出4:
YES
样例输入5:
6
5 5 5 4 4 4
样例输出4:
NO
浅浅分析一下哈
根据题目可知单峰数组可分为
(1).标准的先增加在稳定后减小
(2).没有前面的严格增加,直接减小
可以先从前往后找到一个大值l,再从后往前找到一个大值r,以此来将数组分为1~l,l~r,r~n三段,再对三段逐一核验是否复=符合对应的条件即可啦~~~
#include//单峰数组
using namespace std;//先增后减
int main(){
int i,j,n,a[1001],l,r;
cin>>n;
for(i=1;i<=n;i++) cin>>a[i];
int max1=-1e9;
for(i=1;i<=n;i++){
if(a[i]>max1){
max1=a[i];
l=i;//寻找到左边的大值边界
}
}
int max2=-1e9;
for(i=n;i>=1;i--){
if(a[i]>max2){
max2=a[i];
r=i;//右边大值的边界
}
}
// cout<=a[i+1])
f1=0;
break;
}
for(i=l;i
你是否还在寻找稳定的海外服务器提供商?创新互联www.cdcxhl.cn海外机房具备T级流量清洗系统配攻击溯源,准确流量调度确保服务器高可用性,企业级服务器适合批量采购,新人活动首月15元起,快前往官网查看详情吧
网站名称:单峰数组c++捏-创新互联
链接分享:http://azwzsj.com/article/ijepc.html