力扣HOT100(52)动态规划 - 最长递增子序列

先搞懂:什么是「子序列」?

这是新手最容易搞混的点,一定要和「子串」区分开:

  • 子串 :必须是数组中连续的一段元素
  • 子序列 :可以不连续,但元素的相对顺序不能变

比如数组 [10,9,2,5,3,7,101,18]

  • 子串:[2,5,3](连续)
  • 子序列:[2,3,18](不连续,但顺序不变)

题目要求

找到数组中最长的严格递增子序列的长度

  • 严格递增:后一个元素必须大于前一个,不能等于
  • 子序列可以不连续,但顺序不能乱

核心思路(一句话讲透)

dp[i] 表示:以第 i 个元素结尾的最长递增子序列的长度 。 对于每个元素 nums[i],我们看它前面所有比它小的元素 nums[j](j < i):

  • 如果 nums[j] < nums[i],说明 nums[i] 可以接在 nums[j] 后面,形成一个更长的子序列
  • 这个更长的子序列长度就是 dp[j] + 1
  • 我们在所有可能的 dp[j] + 1 中取最大值,就是 dp[i] 的值

所以状态转移方程:

plaintext

复制代码
dp[i] = max(dp[j] + 1)  (其中 0 ≤ j < i 且 nums[j] < nums[i])

完整解题步骤

  1. 处理边界情况:如果数组为空,直接返回 0
  2. 初始化 dp 数组
    • 数组长度为 n(和原数组一样长)
    • 所有元素初始化为1(因为每个元素自己就是一个长度为 1 的子序列)
  3. 遍历计算 dp 数组
    • 外层循环:i0n-1(当前要计算的元素)
    • 内层循环:j0i-1(前面所有的元素)
      • 如果 nums[j] < nums[i](可以接在后面)
      • 更新 dp[i] = max(dp[i], dp[j] + 1)
  4. 返回结果 :dp 数组中的最大值
    • 注意:最长子序列不一定以最后一个元素结尾,所以不能直接返回dp[n-1]
cpp 复制代码
class Solution {
public:
    int lengthOfLIS(vector<int>& nums) {
        int n = nums.size();
        if(n == 0)
            return 0;


        vector<int> dp(n,1);//初始值设成1 因为序列最短包括自己 长度为1

        for(int i = 0;i<n;i++){
            for(int j = 0;j<i;j++){
                if(nums[j]<nums[i]){
                    dp[i] = max(dp[i],dp[j]+1);
                }
            }
        }  

        return *max_element(dp.begin(),dp.end());
    }
};
相关推荐
GreenTea5 小时前
vLLM 与 SGLang KV Cache 底层实现机制深度调研报告
前端·后端·算法
Bode_20025 小时前
多资源规划(含生产调度、库存管理及产能规划)的创新优化算法
算法·调度
土司大王6 小时前
LeetCode hot100——35.搜索插入位置:Java 二分模板、左闭右开区间与插入点分析
java·算法·leetcode
微三云生态系统架构师-彭丹6 小时前
远方好物S2B2C系统架构:一级分销与保证金托管的合规技术实现
人工智能·算法
土司大王6 小时前
LeetCode hot100——34.在排序数组中查找元素的第一个和最后一个位置:Java 二分模板、边界分析
java·算法·leetcode
罗西的思考8 小时前
机器人模型(WM / WAM / VLA)综合分析与对比:从「看」到「想」再到「做」
人工智能·算法·机器学习
Logic1019 小时前
C语言/数据动态规划题解:翻转一次子数组后的最大子数组和——四状态DP(O(n)时间O(1)空间)
c语言·数据结构·动态规划·时间复杂度·算法题·状态机dp·最大子数组和
小哈里9 小时前
【知识】从学科到实践:自然・工程・社科・人文|算法・研发・产品・品牌设计
程序人生·算法·产品·设计·工程
小π军10 小时前
最大重叠区间数量
数据结构·算法
镜像视界(浙江)科技有限公司10 小时前
《视频孪生之上:二维展示终结,三维空间计算重构城市逻辑》——跨摄像连续表达 × 三角测量厘米级定位 × 动态轨迹建模,构建新一代城市空间
大数据·人工智能·算法·矩阵·音视频·空间计算