您的位置:首页 > 其它

5-2 最长连续递增子序列

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

输入格式:

输入第1行给出正整数nnn(≤105\le
10^5≤10​5​​);第2行给出nnn个整数,其间以空格分隔。

输出格式:

在一行中输出第一次出现的最长连续递增子序列,数字之间用空格分隔,序列结尾不能有多余空格。

输入样例:

15
1 9 2 5 7 3 4 6 8 0 11 15 17 17 10

输出样例:

3 4 6 8


 
 

#include <iostream>
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#define maxsize 1000000
using namespace std;
typedef int element;
typedef struct
{
element * elem;
int length;
int listsize;
}sq;
struct match
{
int c;
int flag;
}m;
int lintlist(sq & l)
{
l.elem = (element *)malloc(maxsize * sizeof(element));
if(!l.elem)
return -1;
l.length = 0;
l.listsize = maxsize;
return 0;
}
void creat(sq & l, int n)
{
for(int i = 0; i < n; i++)
cin >> l.elem[i];
l.length = n;
}
void find(sq & l1, sq & l2)
{
for(int i = 0; i < l1.length; i++)
{
int count = 0;
for(int j = i; j < l1.length; j++)
{
if(l1.elem[j] < l1.elem[j + 1])
{
count++;
l2.elem[i] = count;
}
else
break;
}
}
int max = -1;
int flag;
for(int i = 0; i < l1.length; i++)
{
if(max < l2.elem[i])
{
max = l2.elem[i];
flag = i;
}
}
for(int i = flag; i < flag + max ; i++)
cout << l1.elem[i] << " ";
cout <<l1.elem[flag + max ] << endl;
}
int main()
{
sq l1, l2;
int n;
cin >> n;
lintlist(l1);
creat(l1,n);
lintlist(l2);
find(l1,l2);
return 0;
}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: