1. 程式人生 > >Leetcode---------300. 最長上升子序列

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);
    }
};