最长连续递增子序列(尺取法)

问题: 例如(1,9,2,5,7,3,4,6,8,0)的最长连续递增子序列为(3,4,6,8).

思路: 用两个索引在序列中进行移动,并记录最大的长度和最大长度下的起始索引。需要特别注意的是走在最前面的索引移到了最后并且还是递增的特殊情况。

代码实现:

#include<iostream>
using namespace std;

int a[10]={1,9,2,5,7,3,4,6,8,0};//假设有10个数
int main()
{
    int index0=0,index1=1;
    int maxlen=0,j=0;   //j用于记录最长子序列开始的角标
    while(index1<10)
    {
        if(a[index1]<=a[index1-1]||(index1==9&&a[index1]>a[index1-1]))//如果不是递增或者index1移到了最后并且还是递增
        {
            if(index1==9&&a[index1]>a[index1-1])//index1移到了最后并且还是递增
            {
                j=index0;
                maxlen=index1-index0+1;
            }
            else
            {
                j=index0;
                maxlen=index1-index0;
            }
            index0=index1;  //重新选择起点
        }
        index1++;
    }
    //输出最长递增子序列
    for(int i=j;i<j+maxlen;i++)
        cout<<a[i]<<" ";
    return 0;
}
发布了15 篇原创文章 · 获赞 6 · 访问量 38

猜你喜欢

转载自blog.csdn.net/weixin_46165788/article/details/105522947
今日推荐