切换布局
作者 DS课程组
单位 浙江大学
给定一个顺序存储的线性表,请设计一个算法查找该线性表中最长的连续递增子序列。例如,(1,9,2,5,7,3,4,6,8,0)中最长的递增子序列为(3,4,6,8)。
输入格式:
输入第1行给出正整数n(≤105);第2行给出n个整数,其间以空格分隔。
输出格式:
在一行中输出第一次出现的最长连续递增子序列,数字之间用空格分隔,序列结尾不能有多余空格。
输入样例:
15
1 9 2 5 7 3 4 6 8 0 11 15 17 17 10
输出样例:
3 4 6 8
#include<stdio.h>
#include<malloc.h>
#include<stdlib.h>
typedef int ElemType;
#define MAX 10005
struct LNode
{
int elem;//结构体数组,区别于int* elem;结构体数组指针。
int count;//计数器
} s[MAX];//结构体数组
int main()
{
//输入数组
int m;
scanf("%d",&m);
for(int i; i<m; i++)
{
scanf("%d",&s[i].elem);
s[i].count=1;//记得初始化count
}
//找出每个数组的递增序列的最大个数
for(int i=0; i<m; i++)
{
for(int j=i+1; j<m+1; j++)//j的取值要考虑0
{
if(s[j].elem>s[j-1].elem)
s[i].count++;
else
break;//遇到比他大的或等于的数跳出循环
}
}
int max=0;
int pos;
//找出最大的count值,并找出其位置
for(int i=0; i<m; i++)
{
if(max<s[i].count)
{
max=s[i].count;
pos=i;
}
}
//从pos开始,输出数组
int z;
for(z=pos; z<pos+max-1; z++)
{
printf("%d ",s[z].elem);
}
//这时z=pos+max-1;
printf("%d",s[z].elem);//无空格输出
}