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

来源:互联网 发布:火鸟编程 编辑:程序博客网 时间:2024/05/19 10:36

给定一个顺序存储的线性表,请设计一个算法查找该线性表中最长的连续递增子序列。例如,(1,9,2,5,7,3,4,6,8,0)中最长的递增子序列为(3,4,6,8)。
输入格式:
输入第1行给出正整数
nn
n(
≤105\le 10^5
≤10
​5
​​);第2行给出
nn
n个整数,其间以空格分隔。
输出格式:
在一行中输出第一次出现的最长连续递增子序列,数字之间用空格分隔,序列结尾不能有多余空格。
输入样例:
15
1 9 2 5 7 3 4 6 8 0 11 15 17 17 10
输出样例:
3 4 6 8

#include <bits/stdc++.h>using namespace std; //因为n是10^5,n^2 = 10^10,可能会超时;//最好就是降到O(n) void FindMaxIncreaseList(){    int n;    scanf("%d", &n);    int array[100005];    for (int i = 0; i < n; i++) {        scanf("%d", &array[i]);    }    vector<int> record; //记录     vector<int> test;   //辅助     record.clear();    int MaxNum = 1;    int ThisNum = 1;    int val = array[0];    record.push_back(val);    //Out the first exampleList     int i;    for (i = 1; i < n; i++) {        if (array[i] > val) {            ThisNum++;            record.push_back(array[i]);            val = array[i];        } else {            break;        }    }     /**    MaxNum = ThisNum:记录第一个节点开始遍历到的最长的递增序列    ThisNum = 1: 记录完后初始化    val = array[i],也进行初始化     */     MaxNum = ThisNum;        ThisNum = 1;    val = array[i];    test.clear();    //从i开始遍历,     for (int j = i; j < n; j++) {        if (array[j] > val) {            ThisNum++;            test.push_back(array[j]);            val = array[j];        } else {            if (ThisNum > MaxNum) {                MaxNum = ThisNum;                record.clear();                for (int k = 0; k < test.size(); k++) {                    record.push_back(test[k]);                }            }            test.clear();            ThisNum = 1;            val = array[j];            test.push_back(val);        }    }    //因为最后一个没有比较     if (ThisNum > MaxNum) {        MaxNum = ThisNum;        record.clear();        for (int k = 0; k < test.size(); k++) {            record.push_back(test[k]);        }    }    //output    for (int i = 0; i < record.size(); i++) {        if (i == 0) printf("%d", record[i]);        else printf(" %d", record[i]);    }    record.clear();    test.clear();}   int main(){    FindMaxIncreaseList();    return 0;}
原创粉丝点击