「最长连续递增子序列」

本文探讨了在解决最长连续递增子序列问题时,从最初的双循环思路转向单循环优化的过程。作者意识到双循环可能导致栈溢出,并通过反思KMP算法避免了不必要的回溯。虽然尚未掌握KMP算法的next数组构造,但作者尝试模仿他人的一次循环解决方案,以提升自己的算法理解。
摘要由CSDN通过智能技术生成

想了好久

本来搞了两个循环,stack overflow了......

后来想想用一个循环来实现

(之所以想要两个循环是因为本来想着一旦遇到降序大串就回溯,但是想到KMP算法,这个回溯根本没有意义,因为当前已经是连续递增序列了,回溯了只会是当前序列的子序列,回溯根本没有意义)

(可是到目前为止还是没有学会怎么求KMP算法中的next数组,orz....以后慢慢学吧)

每次看大佬题解都不敢细看,总是幻想能有一些新思路然后自己去写

比如这次,看别人只用了一个循化,自己也去思考如何用一个循环写出来

总而言之,菜是原罪......

#include <stdio.h>

const int max = 100005;
int main()
{
    int start,length,maxlength=1,i,j,n;
    int a[max];
    scanf("%d",&n);
    for(i=0;i<n;i++) scanf("%d",&a[i]);    //读入数组
    start = 0;
    length = 1;
    for(i=1;i<n;i++)
    {
        if(a[i]>a[i-1])
            length++;
        else
            length = 1;        //一旦找到逆序,长度重置
        if(length>maxlength)   //实时更新当前最大长度与开始位置
        {
            maxlength = length;
            st
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值