1. 程式人生 > >習題3.4 最長連續遞增子序列

習題3.4 最長連續遞增子序列

習題3.4 最長連續遞增子序列(20 分)

給定一個順序儲存的線性表,請設計一個演算法查詢該線性表中最長的連續遞增子序列。例如,(1,9,2,5,7,3,4,6,8,0)中最長的遞增子序列為(3,4,6,8)。

輸入格式:

輸入第1行給出正整數n105);第2行給出n個整數,其間以空格分隔。

輸出格式:

在一行中輸出第一次出現的最長連續遞增子序列,數字之間用空格分隔,序列結尾不能有多餘空格。

AC程式碼:
/*最長連續遞增子序列*/
#include<stdio.h>
struct node
{
    int b;//儲存當前數的數值
    int k;//記錄該數開始的遞增情況
}
s[100001];

int main()
{
int i,j;
int n;
int maxi=1,c;
scanf("%d",&n);
for(i=0;i<n;i++)
    scanf("%d",&s[i].b);
for(i=0;i<n;i++)
    s[i].k=1;
for(i=0;i<n-1;i++)
{
    for(j=i+1;j<n;j++)
    {
        //判斷是否為遞增的,後面的大於前面的,即為遞增
        if(s[j].b>s[j-1].b)
            s[i].k++;
        else
            break;
    }
}
for(i=0;i<n;i++)
{
    if(s[i].k>maxi)
        //連續遞增的數的個數大於當前最大值
    {
        maxi=s[i].k;
        c=i;//從i開始的序列
    }
}
for(i=c;i<c+maxi-1;i++)
    printf("%d ",s[i].b);
printf("%d\n",s[c+maxi-1].b);
    return 0;
}