LeetCode 300 & 674:最长递增子序列 vs 最长连续递增子序列

LeetCode 300 & 674:最长递增子序列 vs 最长连续递增子序列 ------ 联合题解 ✅

这两道题名字几乎一样,但 DP 思想和难度完全不同

下面我把它们 放在一张笔记里,重点对比"连续 vs 不连续"


📌 题目列表

题号 题目 是否连续
300 最长递增子序列 ❌ 不要求连续
674 最长连续递增子序列 ✅ 必须连续

📖 内容概要

给定一个整数数组 nums,求 最长递增子序列的长度

  • 300:可以不连续
  • 674:必须连续

✅ 动态规划

✅ 面试高频

✅ 对比强烈


💡 解题思路对比(核心)

一、状态定义(两题相同)

java 复制代码
dp[i] = 以 nums[i] 结尾的递增子序列长度

二、状态转移(关键区别)

题目 状态转移
300 dp[i] = max(dp[j] + 1) , j < i && nums[i] > nums[j]
674 dp[i] = dp[i-1] + 1 , nums[i] > nums[i-1]

300 要枚举所有前面的 j

674 只看前一个


✅ 300 题:最长递增子序列(不连续)

思路

  • 每个位置尝试接在所有更小的数后面
  • 取最大值

AC 代码(Java)

java 复制代码
class Solution {
    public int lengthOfLIS(int[] nums) {
        int len = nums.length;
        int[] dp = new int[len];
        int res = 1;

        for (int i = 0; i < len; i++) {
            dp[i] = 1;
            for (int j = 0; j < i; j++) {
                if (nums[i] > nums[j]) {
                    dp[i] = Math.max(dp[i], dp[j] + 1);
                }
            }
            res = Math.max(res, dp[i]);
        }
        return res;
    }
}

复杂度

指标 复杂度
时间复杂度 O(n²)
空间复杂度 O(n)

✅ 674 题:最长连续递增子序列

思路

  • 只关心是否比前一个大
  • 是 → 续上
  • 否 → 重新开始

AC 代码(Java)

java 复制代码
class Solution {
    public int findLengthOfLCIS(int[] nums) {
        int len = nums.length;
        int[] dp = new int[len];
        int res = 1;

        dp[0] = 1;
        for (int i = 1; i < len; i++) {
            if (nums[i] > nums[i - 1]) {
                dp[i] = dp[i - 1] + 1;
            } else {
                dp[i] = 1;
            }
            res = Math.max(res, dp[i]);
        }
        return res;
    }
}

复杂度

指标 复杂度
时间复杂度 O(n)
空间复杂度 O(n)

🔍 两题核心对比总结

对比项 300 674
是否连续
状态依赖 所有前面状态 仅前一个
时间复杂度 O(n²) O(n)
难度 中等 简单

✅ 一句话总结

300 是"选或不选"的 DP,674 是"接或不接"的 DP。


📌 面试加分点(建议记住)

  • ✅ 为什么 300 不能贪心?
  • ✅ 为什么 674 不需要二维 DP?
  • ✅ 什么时候可以用贪心代替 DP?
  • ✅ 如何把 300 优化到 O(n log n)
相关推荐
果壳science37 分钟前
《自然本源》如何实现狭义相对论的代数化
笔记·算法·几何学
302wanger1 小时前
分享一个工作习惯:整点看即时消息
算法
洋不写bug3 小时前
排序(一)基础排序,插入|希尔|冒泡|直接选择排序详解
java·算法·排序算法·插入排序·冒泡排序·希尔排序·直接选择排序
牧羊人.3333 小时前
动手学深度学习 03 | 卷积神经网络实现手写数字识别
人工智能·深度学习·神经网络·算法·cnn
AgentMaster3 小时前
数据治理工具选型指南:一套可复用的四阶段决策框架
大数据·数据结构·人工智能·算法
liliangcsdn4 小时前
最终留出样本/样本外测试集-holdout解读
算法
程序员江念4 小时前
【最经典的79个】软件测试面试题(内含答案)提前备战“金九银十”
软件测试·面试·职场和发展
爱敲代码的小黄4 小时前
机器学习入门:从数据、训练到业务决策
算法
数据知道4 小时前
哈希与密码存储——bcrypt、Argon2、盐值与彩虹表
网络·算法·安全·网络安全·密码学·哈希算法
haon11224 小时前
树模型在信贷风控怎么用——从决策树到 XGBoost
大数据·人工智能·算法·决策树·机器学习·数据挖掘