其他分享
首页 > 其他分享> > PTA 浙大《数据结构(第二版)》习题3.4 最长连续递增子序列 (20 分)

PTA 浙大《数据结构(第二版)》习题3.4 最长连续递增子序列 (20 分)

作者:互联网

给定一个顺序存储的线性表,请设计一个算法查找该线性表中最长的连续递增子序列。例如,(1,9,2,5,7,3,4,6,8,0)中最长的递增子序列为(3,4,6,8)。

输入格式:

输入第1行给出正整数n(≤10
​5
​​ );第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<stdlib.h>
typedef int Position;
typedef struct LNode *PtrToNode;
typedef int ElmentType;
#define MAXSIZE 100001
struct LNode
{
	ElmentType Data[MAXSIZE];
	Position Last;
};
typedef PtrToNode List;
List ReadInput()
{
	int N,i;
	List L;
	L=(List)malloc(sizeof(struct LNode));
	L->Last=-1;
	scanf("%d",&N);
	L->Last=N-1;
	for(i=0;i<=L->Last;i++)
	{
		scanf("%d",&L->Data[i]);
	}
	return L;
}
void PrintList( List L )
{
	int i=0;
	printf("%d",L->Data[i]);
	for(i=1;i<=L->Last;i++)
	{
		printf(" %d",L->Data[i]);
	}

}
void find(List L)
{
	int i;
	int Maxlen=0,len=0;
	int head=0,Tmphead=0,Tmptail=0,tail=0;
	//判断是否递增
	while(Tmptail<L->Last)
	{
		while(L->Data[Tmptail]<L->Data[Tmptail+1])
		{
			Tmptail++;
		}
		len=Tmptail-Tmphead+1;
		{
			if(len>Maxlen)
			{
				Maxlen=len;
				head=Tmphead;
				tail=Tmptail;
			}
			else
			{
				Tmphead=Tmptail+1;
				Tmptail=Tmphead;
			}
		}
	}
	printf("%d",L->Data[head]);
	for(i=head+1;i<=tail;i++)
	{
		printf(" %d",L->Data[i]);
	}

}

int main()
{
	List L;
	int i;
	L=ReadInput();
	//PrintList(L);
	//printf("\n");
	find(L);
	system("pause");
	return 0;
}

标签:20,int,Tmptail,List,3.4,printf,习题,Data,Tmphead
来源: https://blog.csdn.net/weixin_42596724/article/details/99202628