当前位置: 首页 > news >正文

300. 最长递增子序列

        理解最长递增子序列(LIS)是解决该问题的关键。子序列是从给定数组中按顺序选取的元素序列,例如数组 [1, 2, 3, 4, 5] 的子序列可以是 [2, 3, 4]。需要注意的是,子序列的元素在原数组中不一定是连续的。因此,最长递增子序列就是在所有可能的递增子序列中,找出长度最长的那个。

        本题是一个典型的动态规划问题,我们可以通过定义状态和状态转移方程来解决:

状态定义: dp[i] 表示以第 i 个元素为结尾的最长递增子序列的长度。

状态转移方程: 根据递增的定义,如果当前元素 nums[i] 大于之前的某个元素 nums[j],那么 dp[i] 可以由 dp[j] 转移而来,即 dp[i] = max(dp[j] + 1, dp[i])

边界条件: 每个元素本身就是一个长度为 1 的递增子序列,因此 dp[i] 的初始值应设为 1。

        此外,由于最长递增子序列可能以任意元素结尾,因此在计算过程中需要维护 dp 数组的最大值作为最终结果。

        代码

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

        时间复杂度:O(n^2)

        空间复杂度:O(n)

相关文章:

  • Linux动态库与静态库
  • 编译支持CUDA-aware的OpenMPI
  • YOLOv12模型部署(保姆级)
  • sqlalchemy库详细使用
  • 如何下载 MySQL 驱动 JAR 包
  • 分布式2(限流算法、分布式一致性算法、Zookeeper )
  • 牛顿均差知识
  • 负进制转换
  • STC32G12K128实战:串口通信
  • 计算机网络-MPLS LDP基础实验配置
  • 易学探索助手-个人记录(十)
  • Kuka AI音乐AI音乐开发「人声伴奏分离」 —— 「Kuka Api系列|中文咬字清晰|AI音乐API」第6篇
  • python打卡day25
  • 数字高程模型(DEM)公开数据集介绍与下载指南
  • vscode extention踩坑记
  • 七部门:设立“国家创业投资引导基金”,优先支持取得关键核心技术突破的科技型企业上市融资
  • 学会使用ai作图
  • c++在头文件中声明全局的变量
  • TNNLS-2020《Autoencoder Constrained Clustering With Adaptive Neighbors》
  • Deep Learning(手写字识别 - CNN)
  • 马上评|中学生被操场地面烫伤,谁的“大课间”?
  • 通用汽车回应进口车业务调整传闻:因经济形势变化重组,致力于在中国持续发展
  • 不是10点!乌克兰官员称尚未就俄乌谈判开始时间达成一致
  • 南方降水频繁暴雨连连,北方高温再起或现40°C酷热天气
  • 秘鲁总统任命前司法部长阿拉纳为新总理
  • 网约车座椅靠背张贴“差评者得癌症”,如祺出行:未收到投诉无法处理