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

最长递增子序列的个数

本文参考代码随想录

给定一个未排序的整数数组,找到最长递增子序列的个数。

示例 1:

输入: [1,3,5,4,7]
输出: 2
解释: 有两个最长递增子序列,分别是 [1, 3, 4, 7] 和[1, 3, 5, 7]。
示例 2:

输入: [2,2,2,2,2]
输出: 5
解释: 最长递增子序列的长度是1,并且存在5个子序列的长度为1,因此输出5

思路

动态规划

  1. 确定dp数组(dp table)以及下标的含义
    dp[i]:i之前(包括i)最长递增子序列的长度为dp[i]
    count[i]:以nums[i]为结尾的字符串,最长递增子序列的个数为count[i]

  2. 确定递推公式
    在nums[i] > nums[j]前提下,如果在[0, i-1]的范围内,找到了j,使得dp[j] + 1 > dp[i],说明找到了一个更长的递增子序列。那么以j为结尾的子串的最长递增子序列的个数,就是最新的以i为结尾的子串的最长递增子序列的个数,即:count[i] = count[j]。
    在nums[i] > nums[j]前提下,如果在[0, i-1]的范围内,找到了j,使得dp[j] + 1 == dp[i],说明找到了两个相同长度的递增子序列。
    那么以i为结尾的子串的最长递增子序列的个数 就应该加上以j为结尾的子串的最长递增子序列的个数,即:count[i] += count[j];

  3. dp数组如何初始化
    count[i]记录了以nums[i]为结尾的字符串,最长递增子序列的个数。那么最少也就是1个,所以count[i]初始为1。
    dp[i]记录了i之前(包括i)最长递增序列的长度。最小的长度也是1,所以dp[i]初始为1。

  4. 确定遍历顺序
    dp[i] 是由0到i-1各个位置的最长升序子序列 推导而来,那么遍历i一定是从前向后遍历。
    j其实就是0到i-1,遍历i的循环里外层,遍历j则在内层

classSolution:deffindNumberOfLIS(self,nums:List[int])->int:size=len(nums)ifsize<=1:returnsize dp=[1]*size count=[1]*size max_length=1foriinrange(size):forjinrange(i):ifnums[i]>nums[j]:ifdp[j]+1>dp[i]:dp[i]=dp[j]+1count[i]=count[j]elifdp[j]+1==dp[i]:count[i]+=count[j]ifdp[i]>max_length:max_length=dp[i]max_count=0foriinrange(size):ifmax_length==dp[i]:max_count+=count[i]returnmax_count
http://www.jsqmd.com/news/241276/

相关文章:

  • I2C通信协议工业级设计要点:核心要点
  • 【c++进阶】再谈虚函数
  • Proteus 8.9环境搭建教程:全面讲解安装细节
  • 杰理芯片SDK开发-AD697N添加按键触摸提示音功能教程
  • 1.13草花互动面试
  • 芯片验证工程师的写代码能力不是第一位
  • IAR软件编译选项设置深度剖析与优化建议
  • JFlash烧录固件的完整指南与调试技巧
  • 断言:让芯片设计工程师又爱又恨
  • 尾调用搞懂了,JS性能直接起飞?前端人别再被面试官问懵了!
  • 程序员如何在技术变革中保持竞争力
  • FileMasterPro v1.2.5:全能多功能文件管理工具
  • C#热更原理:为何原生不支持DLL替换?
  • Winhance v26.01.12 便携版:Windows 系统优化工具
  • 2026年安徽省职业院校技能大赛(高职组) 电子数据取证与分析(学生赛)样题任务书
  • 抗干扰PCB工艺设计:工业电子一文说清
  • Go进阶之协程
  • 2026年安徽省职业院校技能大赛(高职组) 电子数据取证与分析(学生赛)赛项规程
  • Vue.js 前端开发实战 ( 电子版 ) —— 黑马
  • 波长分割复用 + 无源分光:单纤双向如何撑起全光接入?
  • 基于真实项目的KeilC51与MDK双环境部署教程
  • STM32中I2C重入问题与中断处理图解说明
  • 从零实现Keil5 Debug调试工程配置全过程
  • 从零实现STM32高精度定时的时钟树设置
  • AgentCPM-Explore开源,4B 参数突破端侧智能体模型性能壁垒
  • Keil安装教程图解说明:从下载到环境部署全流程
  • 从零开始搭建工控平台:STLink驱动安装操作指南
  • CMSIS底层初始化流程详解:系统学习手册
  • AUTOSAR架构图基础讲解:手把手认识经典平台结构
  • 提示工程架构师:设计灵活的AI提示系统反馈与响应机制