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)
相关推荐
ychqsq3 小时前
201.春风
经验分享·职场和发展
小蒋学算法4 小时前
算法-交替删除操作后最后剩下的整数-跟着灵茶山艾府学算法
数据结构·算法
荆棘鸟智能4 小时前
林业遥感长势评估怎么做?从NDVI时序分析到LiDAR蓄积量回归
人工智能·算法·智慧林业
hhb_6185 小时前
AIRAGDebug:一键定位RAG链路异常
人工智能·python·算法
泡沫_花火5 小时前
大模型开发相关岗位面试资料(含算法)
语言模型·自然语言处理·面试·职场和发展
朝朝辞暮i5 小时前
C++ 第 6 课:switch —— 多状态选择
开发语言·c++·算法
苏打豆6 小时前
Pinocchio源码阅读——刚体运动物理量空间变换及求导
c++·线性代数·算法·矩阵·机器人
FluxArt6 小时前
GPT Image 2.5 中文提示词教程:Flux Art 可复用模板
前端·gpt·算法
思麟呀6 小时前
位运算:从一个整数到一个集合
c语言·数据结构·c++·算法
阜阳山君GEO6 小时前
豆包 SEED 新版本 GEO 优化:信源金字塔、打分体系与避坑落地指南
人工智能·算法