Leetcode---------300. 最長上升子序列
給定一個無序的整數陣列,找到其中最長上升子序列的長度。
示例:
輸入:[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);
}
};