news 2026/4/18 0:01:56

最长递增子序列的个数

作者头像

张小明

前端开发工程师

1.2k 24
文章封面图
最长递增子序列的个数

本文参考代码随想录

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

示例 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
版权声明: 本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若内容造成侵权/违法违规/事实不符,请联系邮箱:809451989@qq.com进行投诉反馈,一经查实,立即删除!
网站建设 2026/4/10 22:49:47

AUTOSAR中CAN控制器驱动开发实战案例

AUTOSAR中CAN控制器驱动开发实战&#xff1a;从硬件抽象到通信链贯通当汽车ECU遇上标准化通信&#xff1a;为什么我们需要AUTOSAR CAN驱动&#xff1f;现代汽车里藏着上百个电子控制单元&#xff08;ECU&#xff09;&#xff0c;它们像一个个“智能器官”——发动机管理、刹车系…

作者头像 李华
网站建设 2026/4/17 19:01:06

CMSIS底层初始化流程详解:系统学习手册

深入理解CMSIS底层初始化&#xff1a;从启动到main的每一步你有没有遇到过这样的情况&#xff1f;代码烧录成功&#xff0c;下载器能连上&#xff0c;但单片机就是“不干活”——LED不闪、串口没输出。查了一圈外设配置都没问题&#xff0c;最后发现原来是系统时钟没配对&#…

作者头像 李华
网站建设 2026/4/17 22:18:52

ego1开发板大作业vivado实现交通灯控制系统图解说明

ego1开发板实战&#xff1a;用FPGA打造一个会“思考”的交通灯系统你有没有想过&#xff0c;路口那几盏看似简单的红绿灯&#xff0c;其实背后藏着一套精密的“大脑”&#xff1f;它要准确判断何时变灯、确保两个方向不会同时放行、还要能应对突发状况——比如救护车经过时临时…

作者头像 李华
网站建设 2026/4/16 17:24:24

vivado2020.2安装教程:Windows系统入门必看

Vivado 2020.2 安装实战全解析&#xff1a;从零搭建高效 FPGA 开发环境 你是不是也曾在尝试安装 Vivado 的时候&#xff0c;被闪退、驱动失败、许可证无效等问题搞得焦头烂额&#xff1f;明明按照官网步骤一步步来&#xff0c;结果还是“卡在最后一步”。别急——这并不是你的…

作者头像 李华
网站建设 2026/4/17 23:23:42

AI原生应用领域:幻觉缓解的创新解决方案

AI原生应用领域&#xff1a;幻觉缓解的创新解决方案关键词&#xff1a;AI原生应用、幻觉缓解、创新解决方案、人工智能、自然语言处理摘要&#xff1a;本文聚焦于AI原生应用领域中幻觉问题的缓解&#xff0c;首先介绍了AI幻觉的背景知识&#xff0c;包括目的、预期读者等内容。…

作者头像 李华