leecode300.最长递增子序列

dpi表示以numsi这个数结尾的时的严格递增子序列的最长长度,那么只要每次增加一个数字numsi并且这个numsi比之前的numsj要大,dpi就要更新为dpi和dpj+1二者的最大值,初始化默认最大递增子序列都是1

这里遍历顺序的感觉很像多重背包,每次增加一个物品numsi,然后对原本的最大子序列再进一步判断,只要增加的numsi比之前的子序列最后一个数字要大,那么就拼接上更新最大子序列长度

错误代码:这里我忘记了dpi的含义,最后结果dpn-1存储的是以numsn-1结尾的子序列的最大递增长度,在这个错误案例中,正确的子序列是1,3,6,7,9,10,而我的错误代码得到的子序列是1,3,4,5,6

cpp 复制代码
class Solution {
public:
    int lengthOfLIS(vector<int>& nums) {
        int n =nums.size();
        vector<int> dp(n,1);
        for(int i=1;i<n;i++)
            for(int j=0;j<i;j++)
                if(nums[i]>nums[j])
                    dp[i]=max(dp[i],dp[j]+1);
        return dp[n-1];
    }
};

正确代码:应该用一个结果存储真正的最长递增子序列也就是dpn-3而不是dpn-1的值

cpp 复制代码
class Solution {
public:
    int lengthOfLIS(vector<int>& nums) {
        int n =nums.size();
        int result=1;
        vector<int> dp(n,1);
        for(int i=1;i<n;i++){
            for(int j=0;j<i;j++)
                if(nums[i]>nums[j])
                    dp[i]=max(dp[i],dp[j]+1);
            result=max(result,dp[i]);
        }
        return result;
    }
};
相关推荐
垆边人似月.3 分钟前
华为题:无重复字符的最长子串变种
算法
糖果豆豆10 分钟前
灾难性遗忘不是"新旧打架"——旧知识记不住,是因为它没长成"环"
算法
垆边人似月.11 分钟前
华为题:任务调度
数据结构·c++·算法
垆边人似月.12 分钟前
华为题:编辑距离
算法·华为
会灭火的程序员13 分钟前
大模型部署硬件资源计算指南:从显存估算到显卡选型
人工智能·算法
信奥卷王21 分钟前
[GESP202506 六级] 最大因数(含视频)
数据结构·算法
局部有解27 分钟前
Leetcode - 42 接雨水(一维)
数据结构·c++·算法·leetcode
垆边人似月.33 分钟前
华为题:矩阵中的最长递增路径
算法·深度优先
小诗懂技术36 分钟前
linux驱动中断,相关中断的方式与适用场景
linux·arm开发·驱动开发·算法
不会就选b39 分钟前
算法日常・每日刷题--<动态规划>25
算法