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

猜你喜欢

转载自blog.csdn.net/weixin_41514525/article/details/82928186
今日推荐