给定一个无序的整数数组,找到其中最长上升子序列的长度。
示例:
输入:[10,9,2,5,3,7,101,18]
输出: 4 解释: 最长的上升子序列是[2,3,7,101],
它的长度是4
----------------------------------------------------------------------------------------------------------
动态规划问题,用一个数组d[]来存放以最长上升子序列的长度,d[i]表示从[0...i-1]的最长上升子序列。那么d[i]的数值等于
在nums[0]...nums[i-1]中的比nums[i]小的数的d[]中最大值+1。
AC:
class Solution {
public:
int dfs(vector<int>& nums)
{
int d[nums.size()]={0};
d[0]=1;
for (int i=1;i<nums.size();i++)
{
int max=0;
int cnt=0;
for (int j=0;j<i;j++)
{
if (nums[i]>nums[j])
{
cnt++;
if (max<d[j])
max=d[j];
}
}
if (cnt==0) //如果没有比其小的话,其的最长递增序列为1.
d[i]=1;
else
d[i]=max+1;
}
int maxlen=0;
for (int i=0;i<nums.size();i++)
{
if (maxlen<d[i])
maxlen=d[i];
}
return maxlen;
}
int lengthOfLIS(vector<int>& nums) {
if (nums.size()==0)
return 0;
return dfs(nums);
}
};