美文网首页
300. 最长上升子序列

300. 最长上升子序列

作者: 乘瓠散人 | 来源:发表于2021-04-09 14:52 被阅读0次

    题目:给定一个整数数组,求其中最长的严格递增子序列的长度。
    注意子序列和子串的区别:

    • 子序列不要求连续,相对顺序不变即可
    • 子串要求是连续的串
      思路:经典dp问题,定义dp[i]为以第i个数字结尾的最长上升子序列的长度,注意第i个数字被选中。
    int lengthOfLIS(vector<int>& nums){
        int n = nums.size();
        if(n==0) return 0;
    
        int dp[n]; // dp[i]表示以第i个数字结尾的最长上升子序列的长度
        dp[0]=1;
        int res = 1;
        for(int i=1; i<n; i++){
            dp[i]=1;
            for(int j=0; j<i; j++){
                if(nums[j]<nums[i]){
                    dp[i] = max(dp[i], dp[j]+1);
                }
            }
            if(dp[i]>res) res=dp[i];
        }
        return res;
    }
    

    相关文章

      网友评论

          本文标题:300. 最长上升子序列

          本文链接:https://www.haomeiwen.com/subject/ckwikltx.html