案例3-1.2最长连续递增子序列

给定一个顺序存储的线性表,请设计一个算法查找该线性表中最长的连续递增子序列

问题分析

  1. 从某个位置出发,找当前连续递增的子序列,并记录长度和首尾位置
  2. 找出最大长度
  3. 找出最长连续递增子序列中左端点最靠左的序列
#include <stdio.h>
#include<stdlib.h>
#define MAXSIZE 100000
typedef int ElementType;
typedef int Position;
typedef struct LNode *List;
struct LNode{
	ElementType Date[MAXSIZE];
	Position Last;
	};//定义List结构
List ReadInput()//输入顺序表
{
	List L;
	int N;
	L=(List)malloc(sizeof(struct LNode));
	scanf("%d",&N);
	for(L->Last=0;L->Last<N;L->Last++)
	scanf("%d",&L->Date[L->Last]);//从0到n-1存储到线性表的数据域
	L->Last--;
	return L;
}
void PrintReault(List L,Position Left,Position Right)//输出结果
{
	Position i;
	printf("%d",L->Date[Left]);//输出左端点
	for(i=Left+1;i<=Right;i++)//右边剩下依次输出
	printf("%d",L->Date[i]);
	printf("\n");
}
int main()
{	
	List L;
	Position Left,Right,thisL,thisR,i;
	int maxLen,thisLen;
	L=ReadInput();
	Left=Right=thisL=thisR=0;//初始化
	maxLen=thisLen=1;
	for(i=1;i<=L->Last;i++)
	{
		if(L->Date[i]>L->Date[i-1])//如果不是递增序列
		{
			thisLen++;
			thisR++;
		}
		else 
		{
			if(thisLen>maxLen)
			{
				maxLen=thisLen;
				Left=thisL;
				Right=thisR;
			}
			thisLen =1;
			thisL=thisR=i;
		}
	}
		if(thisLen>maxLen)
		{
			maxLen=thisLen;
			Left=thisL;
			Right=thisR;
		}
		printResult(L,Left,Right);
		return 0;
}
		




  • 1
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值