问题描述
笔记
假设buff[i]的含义是,从第0到第i个数的序列中,以第i个数为结尾的LICS的长度。(代码1)
九章算法的解法是,分别计算递增和递减的LICS长度,最后取大者,比我的解法简单。(代码2)
代码1
class Solution {
public:
/**
* @param A an array of Integer
* @return an integer
*/
int longestIncreasingContinuousSubsequence(vector<int>& A) {
// Write your code here
const int len = A.size();
if (len == 1)
return 1;
if (len == 2)
return 2;
int buff[len];
buff[0] = 1;
buff[1] = 2;
for (int i = 2; i < len; i++)
{
if (A[i-2] < A[i-1])
{
if (A[i-1] < A[i])
{
buff[i] = buff[i-1] + 1;
}
else
{
buff[i] = 2;
}
}
else
{
if (A[i-1] > A[i])
{
buff[i] = buff[i-1] + 1;
}
else
{
buff[i] = 2;
}
}
}
int res = buff[0];
for (int i = 1; i < len; i++)
res = max(res, buff[i]);
return res;
}
};
代码2
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;
int nasc = 1;
int ndesc = 1;
int max_nasc = 1;
int max_ndesc = 1;
for (int i = 1; i < A.size(); i++)
{
if (A[i-1] < A[i])
{
nasc++;
max_ndesc = max(max_ndesc, ndesc);
ndesc = 1;
}
else
{
ndesc++;
max_nasc = max(max_nasc, nasc);
nasc = 1;
}
}
max_ndesc = max(max_ndesc, ndesc);
max_nasc = max(max_nasc, nasc);
return max(max_ndesc, max_nasc);
}
};