【力扣】(中等)300. 最长递增子序列 ----- 动态规划

  • 300 最长递增子序列
  • 给你一个整数数组 nums ,找到其中最长严格递增子序列的长度。

子序列是由数组派生而来的序列,删除(或不删除)数组中的元素而不改变其余元素的顺序。例如,[3,6,2,7] 是数组 [0,3,1,6,2,2,7] 的子序列。

来源:力扣(LeetCode)
链接:https://leetcode-cn.com/problems/longest-increasing-subsequence

解题思路:动态规划,dp[i]代表以i个数字结尾的最长子序列长度,通过与其之前位j 的数字大小,若nums[i]>nums[j],则dp[i] = dp[j]+1。

class Solution {
public:
    int lengthOfLIS(vector<int>& nums) {
        if(nums.size()<=1) return nums.size();
        // solution 1:
        // vector<vector<int>> dp(nums.size(),vector<int>(nums.size(),1));
        // int result =1;
        // for(int i=nums.size()-2;i>=0; --i){
        //     int max_ = INT_MIN;
        //     for(int j=i+1;j<nums.size();++j){
        //         if(nums[i]<nums[j]) dp[i][j] = dp[j][j]+1;
        //         else dp[i][j] = 1;
        //         max_ = max(max_, dp[i][j]);
        //     }
        //     dp[i][i] = max_;
        //     result = max(result,dp[i][i]);
        // }
        // return result;

        //solution 2
        // vector<int> dp(nums.size(),1);
        // int max_ = 1;
        // for (int i =1; i<nums.size(); ++i){
        //     dp[i] = maxDP(nums,dp, i)+1;
        //     max_ = max(max_, dp[i]);
        // }
        // return max_;

        vector<int> dp(nums.size(),0);
        int max_ =1;
        for(int i=0; i<nums.size(); ++i){
            dp[i]=1;
            for(int j=0; j<i; ++j){
                if(nums[i]>nums[j]) dp[i] = max(dp[i], dp[j]+1);
            }
            max_ =max(max_, dp[i]);
        }
        return max_;
    }
    //solution 2
    // int maxDP(vector<int>  nums, vector<int> dp, int len){
    //     int max_ = 0;
    //     for(int i =0; i<len; ++i){
    //         if(nums[len]>nums[i]){
    //             max_ = max(max_, dp[i]);
    //         }
    //     }
    //     return max_;
    // }
};
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值