最长连续递增子序列2021-04-30

                                         习题3.4 最长连续递增子序列


初学者把每天刷的题记录一下,以便于自己今后的复习,如果也能帮到别人,那我也很荣幸

#include <stdio.h>
#include<stdlib.h>
#define MAXSIZE 100000
typedef struct LNode *List;
struct LNode{
	int Date[MAXSIZE];
	int Last;
	};//定义List结构
List ReadInput()//输入顺序表
{
	List L;
	int N;
	L=(List)malloc(sizeof(struct LNode));
	scanf("%d\n",&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,int Left,int Right)//输出结果
{
	int i;
	printf("%d",L->Date[Left]);//输出左端点不带空格 
	for(i=Left+1;i<=Right;i++)//右边剩下依次输出,带空格 
	printf(" %d",L->Date[i]);
	printf("\n");
}
int main()
{	
	List L;
	int Left,Right,thisL,thisR,i;		//Left,Right 当前最长序列的左,右端下表,thisL,thisR 正在查找序列的左右下表 
	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)			//全递增情况,没有比较thislen就出循环在这里再比较一次 
		{
			maxLen=thisLen;
			Left=thisL;
			Right=thisR;
		}
		PrintReault(L,Left,Right);
		return 0;
}

 

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值