問題描述:
給定一個整數數組(下標從 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;
}
}
};
感悟:
注意不要把兩個情況弄混了及數組的初始化問題