La subsecuencia de mayor crecimiento continuo (método de la regla de los pies)

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;
}
Publicado 15 artículos originales · elogiado 6 · visitas 38

Supongo que te gusta

Origin blog.csdn.net/weixin_46165788/article/details/105522947
Recomendado
Clasificación