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

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)

http://www.xdnf.cn/news/6238.html

相关文章:

  • PPO算法:一种先进的强化学习策略
  • 深度剖析LLM的“大脑”:单层Transformer的思考模式探索
  • NetSuite CSV导入更新Item Fulfillment相关信息
  • 小白学习java第18天(上):spring
  • 牛客——签到题
  • MODBUS与PROFIBUS-DP通讯的螺杆空压机控制系统设计与监控实况
  • 宝塔基于亚马逊云服务器安装mysql5.7失败问题记录
  • redis 命令大全整理
  • 嵌入式STM32学习——外部中断震动感应灯
  • java8新特性
  • 第七节第二部分:接口的综合案例
  • 一文介绍电路交换、报文交换和分组交换
  • Shell
  • Apollo学习——aem问题
  • AI时代的弯道超车之第十二章:英语和编程重要性?
  • 【ROS2】【分步讲解】节点的使用以及引入消息接口的方法
  • 软件设计师考试《综合知识》计算机编码考点分析——会更新软设所有知识点的考情分析,求个三连
  • Qt之Qfile类
  • STM32-USART串口通信(9)
  • 材料疲劳E-N曲线的优势及其在疲劳仿真中的应用
  • 18、时序数据库 (TSDB) 存储高密度传感器数据组件 - /数据与物联网组件/tsdb-power-plant-archive
  • OpenSHMEM 介绍和使用指南
  • contains方法的实现对比
  • Java 源码 HashMap源码分析
  • ConcurrentHashMap
  • GeoServer发布WMTS详细过程
  • javaScript简单版
  • 详解Windows(十三)——Windows防火墙
  • k8s监控方案实践补充(一):部署Metrics Server实现kubectl top和HPA支持
  • ESG时代,EcoVadis认证如何提升企业国际竞争力