5-2 最长连续递增子序列
2016-07-29 20:13
267 查看
给定一个顺序存储的线性表,请设计一个算法查找该线性表中最长的连续递增子序列。例如,(1,9,2,5,7,3,4,6,8,0)中最长的递增子序列为(3,4,6,8)。
10^5≤105);第2行给出nnn个整数,其间以空格分隔。
#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;
}
输入格式:
输入第1行给出正整数nnn(≤105\le10^5≤105);第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;
}
相关文章推荐
- php之curl的使用
- curl进行传值(post)
- 学的是技术,用的是思想
- (Linux平台)在Android中调用JNI
- 现在的努力与汗水,是为了你以后所想的基石
- process launch failed: failed to get the task for process 7680
- unity 读写sd卡
- Mysql计划任务自动定时备份数据库方法-for windows
- POJ 3176 Cow Bowling
- 采集(file_get_contents)
- 华为OJ 初级:24点游戏算法
- 合并两个排序的链表-奇怪的RE
- ubuntu搭建个人WDCP
- DSP移植-OTSU算法
- 函数回调机制、异步函数回调机制图例详解
- 电阻阻值表示方法
- Studio中xml布局的design不显示“ Rendering Problems Exception raised during rendering: com/android/ut”,解决方案!
- 2016-07-29:周末计划
- Material-CalendarView实现的旅行日历
- 5-1 数列求和-加强版