最长上升连续子序列
来源:互联网 发布:网络新媒体就业前景 编辑:程序博客网 时间:2024/06/07 07:24
描述
给定一个整数数组(下标从 0 到 n-1, n 表示整个数组的规模),请找出该数组中的最长上升连续子序列。(最长上升连续子序列可以定义为从右到左或从左到右的序列。)
注意事项
time
样例
给定 [5, 4, 2, 1, 3], 其最长上升连续子序列(LICS)为 [5, 4, 2, 1], 返回 4.
给定 [5, 1, 2, 3, 4], 其最长上升连续子序列(LICS)为 [1, 2, 3, 4], 返回 4.
思考
- 计算连续递增的最长序列长度,如果长度大于 length/2, 则直接返回
- 计算连续递减的最长序列长度,如果长度大于 length/2, 则直接返回
- 否则,比较两个最长序列长度
代码
// By Lentitudeclass Solution {public: /** * @param A an array of Integer * @return an integer */ int longestIncreasingContinuousSubsequence(vector<int>& A) { // Write your code here // longest if (A.empty()) return 0; int temp = 1; // 记录连续长度 int ret_r = 0; // 记录向右连续的最长长度 int i = 1; // 正序查看最长连续 while (i < A.size()) { if (A[i] >= A[i - 1]) { ++temp; } else { // 注意: else 情况不是一定发生,所以必须有 2 的存在,来比较最后一次结果。后面同理 ret_r = max(ret_r, temp); // 1 temp = 1; } ++i; } ret_r = max(ret_r, temp); // 2 // 如果递增连续序列长度大于length/2,则直接返回数据 if (ret_r > A.size() / 2){ return ret_r; } i = 1; temp = 1; int ret_l = 0; while (i < A.size()) { if (A[i - 1] >= A[i]) { ++temp; } else { ret_l = max(ret_l, temp); temp = 1; } ++i; } ret_l = max(ret_l, temp); // 如果递减连续序列长度大于length/2,则直接返回数据 if (ret_l > A.size() / 2){ return ret_l; } // 否则进行比较 return max(ret_l, ret_r); }};
0 0
- 最长上升连续子序列
- 最长上升连续子序列
- 最长连续上升子序列
- 最长上升连续子序列
- 最长上升连续子序列
- 最长上升连续子序列
- 最长上升连续子序列
- 最长上升连续子序列
- 最长上升连续子序列
- 最长上升连续子序列
- hdu1069-最长连续上升子序列
- 题目:最长上升连续子序列
- LintCode--最长上升连续子序列
- lintcode-最长上升连续子序列-397
- 最长上升连续子序列(LintCode)
- LintCode- 最长上升连续子序列
- lintCode刷题--最长上升连续子序列
- 最长上升连续子序列 II
- JS相关网站
- 机器学习前导---IBM讲座笔记
- 关于521
- 在Quartus II 13.1里RTL视图问题
- MyBatis调用存储过程,含有返回结果集、return参数和output参数
- 最长上升连续子序列
- Android开发准备——Java和Android Studio环境搭建
- JZOJ 4.15 1666——【AHOI2009】飞行棋
- JSP入门_TWO
- wsdl配置文件
- WAV文件格式分析
- 一些常见的问题错误及解决方式
- C++<set>集合
- iOS