Problema: Por ejemplo (1,9,2,5,7,3,4,6,8,0) la subsecuencia que aumenta continuamente de forma más larga es (3,4,6,8).
Idea: Use dos índices para moverse en la secuencia y registre la longitud máxima y el índice inicial debajo de la longitud máxima. Se debe prestar especial atención al caso especial en el que el índice en primer plano se mueve hasta el final y sigue aumentando.
Implementación de código:
#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;
}