给定一个整数序列,找到最长上升子序列(LIS),返回LIS的长度。
样例
给出 [5,4,1,2,3],LIS 是 [1,2,3],返回 3
给出 [4,2,4,5,3,7],LIS 是 [2,4,5,7],返回 4
class Solution {
public:
/**
* @param nums: An integer array
* @return: The length of LIS (longest increasing subsequence)
*/
int longestIncreasingSubsequence(vector<int> &nums) {
// write your code here
int n = nums.size();
if(n == 0)
return 0;
vector<int> dp(n, 1);
for(int i=1; i<n; i++)
{
for(int j=0; j<i; j++)
{
if(nums[j] < nums[i] && dp[i] < dp[j] + 1)
dp[i] = dp[j] + 1;
}
}
int maxLen = 0;
for(int i=0; i<n; i++)
{
if(dp[i] > maxLen)
maxLen = dp[i];
}
return maxLen;
}
};