问题描述:
给定一个整数数组(下标从 0 到 n-1, n 表示整个数组的规模),请找出该数组中的最长上升连续子序列。(最长上升连续子序列可以定义为从右到左或从左到右的序列。)
样例
给定 [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
int n=A.size();
if(n<2) return n;
else{
int maxlen1[n]={1};
int maxlen2[n]={1};
int max[n]={1};
for(int i=1;i<n;i++)
{
maxlen1[i]=1;
maxlen2[i]=1;
if(A[i]>A[i-1]) //升序
{
if (maxlen1[i-1]+1 > maxlen1[i])
{
maxlen1[i] = maxlen1[i-1] + 1;
}
}
if(A[i]<A[i-1]) //降序
{
if (maxlen2[i-1]+1 > maxlen2[i])
{
maxlen2[i] = maxlen2[i-1] + 1;
}
}
if(maxlen1[i]<maxlen2[i]) max[i]=maxlen2[i];
else max[i]=maxlen1[i];
}
int m=-1;
for(int i=1;i<n;i++)
{
if(m<max[i])
m=max[i];
}
return m;
}
}
};
感悟:
注意不要把两个情况弄混了及数组的初始化问题