描述:
给定一个整数数组(下标从 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.
思路:
建立一个数组f,f[n]表示以A[n]为终点的连续子序列的和,maxx表示和的最大值,我们通过比较A[n-1]与A[n]是否存在连续关系,若存在,则f[n]的值为f[n-1]+A[n];若不存在连续关系,则f[n]=A[n],即更新连续子序列的起始位置。同时通过比较判断是否需要更新当前maxx的值。
AC代码:
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==0)
return 0;
int maxx=1,i;
int f[n];
f[0]=1;
for(i=1;i<n;i++)
{
if(A[i]>A[i-1])
{
f[i]=f[i-1]+1;
maxx=max(f[i],maxx);
}
else
f[i]=1;
}
for(i=1;i<n;i++)
{
if(A[i]<A[i-1])
{
f[i]=f[i-1]+1;
maxx=max(f[i],maxx);
}
else
f[i]=1;
}
return maxx;
}
};