问题标题: 酷町堂:问题111

0
0
已解决
孔小川
孔小川
初级光能
初级光能

 

题目描述 Description

酷町猫喜欢在酷町天梯上做题刷分,他整整刷了n天。已知他在第i天得了ai分(1 ≤ i ≤ n;)。酷町猫非常喜欢进步,所以他想知道存储得分的数组ai里最大非递减子数组的长度。数组的子数组就是它的连续片段。如果其中的所有数字都遵循非递减顺序(也就是增加或者不变),则称为非递减的数组。帮酷町猫解决这个难题吧。例如得分数组1 2 2 3 3 3 4 5 4 4 5 5,其中子数组1 2 2 3 3 3 4 5是非递减的,长度为8;而4 4 5 5也是非递减的子数组,长度只有4,所以这个得分数组的最大非递减子数组的长度为8。

输入描述 Input Description

第一行包含整数n(1≤n≤10^5)。

第二行包含n个整数a1,a2,…,an(1≤ai≤10^9)。

输出描述 Output Description

输出一个整数,数组ai的最大非递减子数组的长度。

样例输入 Sample Input

【输入样例1】 6 2 2 1 3 4 1 【输入样例2】 3 2 2 9

样例输出 Sample Output

【输出样例1】 3 【输出样例2】 3

数据范围及提示 Data Size & Hint

在第一个样例中,最大的非递减子段是从第三个元素到第五个元素的数字。

在第二个样例中,最大的非递减子段是从第一个元素到第三个元素的数字。


0
已采纳
汪宇航
汪宇航
新手启示者
新手启示者

 

for(int i=1;i<=n;i++){ cin>>a[i]; } for(int i=1;i<=n;i++){ if(a[i]<=a[i+1]){ cnt++; b[i]=cnt; }else{ cnt=1; b[i]=cnt; } } maxn=b[1]; for(int i=1;i<=n;i++){ maxn=max(maxn,b[i]); } cout<<maxn;

望采纳

汪宇航在2021-02-09 14:18:45追加了内容

 

for(int i=1;i<=n;i++){

cin>>a[i];

}

for(int i=1;i<=n;i++){

if(a[i]<=a[i+1]){

cnt++;

b[i]=cnt;

}else{

cnt=1; b[i]=cnt;

}

}

maxn=b[1];

for(int i=1;i<=n;i++){

maxn=max(maxn,b[i]);

}

cout<<maxn;

刚刚打错了,望采纳

0
汪恺恒
汪恺恒
中级启示者
中级启示者

经典的最长不下降连续子序列

首先输入数组

开始寻找

循环(i:1~n){
        如果(a[i]<=a[i+1]){//可以构成不下降序列
            k++;
            b[i]=k; //记录最大值
        }
        else{
            k=1;
            b[i]=k;
        }
    }

之后开始寻找最大值

定义maxn,赋值为b[1]

for(int i=1;i<=n;i++){
     如果b[i]比maxn大  把maxn赋为b[i]
}

 

0
我要回答