7-5 最长连续递增子序列 (20分)
给定一个顺序存储的线性表,请设计一个算法查找该线性表中最长的连续递增子序列。例如,(1,9,2,5,7,3,4,6,8,0)中最长的递增子序列为(3,4,6,8)。
话不多说,直接上代码:
#include<stdio.h>
#define N 10000
int main()
{
int a[N],n;
int i,t[N],j,k;//t[N]下标是递增子序列的起始位置,t[N]为递增子序列的元素个数
int max;
for(i=0;i<N;i++)
t[i]=1;
scanf("%d",&n);
for(i=0;i<n;i++)
{
scanf("%d",&a[i]);
}
for(i=0;i<n;i++)
{
k=i;
for(j=i+1;j<n;j++)
{
if(a[j]>a[j-1])
{
t[k]++;
}
else
{
i=j;
i--;//由于外部循坏有i++,所以需要减一个
break;
}
}
}
max=1;
for(i=0;i<n;i++)//寻找最长递增子序列
{
if(t[i]>max)
{
max=t[i];//记录最长递增序列的元素个数
k=i;//记录最长递增序列的起始位置
}
}
for(i=k;i<=k+max-1;i++)
{
printf("%d",a[i]);
if(i+1<=max+k-1)
printf(" ");
}
}