描述
给定一个整数数组(下标从 0 到 n-1, n 表示整个数组的规模),请找出该数组中的最长上升连续子序列。(最长上升连续子序列可以定义为从右到左或从左到右的序列。)
time
您在真实的面试中是否遇到过这个题? 是
样例
给定 [5, 4, 2, 1, 3], 其最长上升连续子序列(LICS)为 [5, 4, 2, 1], 返回 4.
给定一个整数数组(下标从 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.
程序
class Solution { public: /** * @param A: An array of Integer * @return: an integer */ int longestIncreasingContinuousSubsequence(vector<int> &A) { // write your code here if (A.empty()) return 0; if (A.size() == 1) return 1; //从左向右 int result1 = 0; int cur = 1; for (int i = 1; i < A.size(); i++){ if (A[i] > A[i - 1]){ cur++; result1 = result1 > cur ? result1 : cur; } else cur = 1; } //从右向左 int result2 = 0; cur = 1; for (int i = A.size() - 1; i >= 1; i--){ if (A[i - 1] > A[i]){ cur++; result2 = result2 > cur ? result2 : cur; } else cur = 1; } return max(result1, result2); } };