news 2026/11/2 3:31:04

最长递增子序列的个数

作者头像

张小明

前端开发工程师

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/11/2 4:08:18

单词接龙问题

本文参考代码随想录 字典 wordList 中从单词 beginWord 和 endWord 的 转换序列 是一个按下述规格形成的序列&#xff1a; 序列中第一个单词是 beginWord 。 序列中最后一个单词是 endWord 。 每次转换只能改变一个字母。 转换过程中的中间单词必须是字典 wordList 中的单词。…

作者头像 李华
网站建设 2026/11/2 4:07:57

冗余连接II

本文参考代码随想录 在本问题中&#xff0c;有根树指满足以下条件的 有向 图。该树只有一个根节点&#xff0c;所有其他节点都是该根节点的后继。该树除了根节点之外的每一个节点都有且只有一个父节点&#xff0c;而根节点没有父节点。 输入一个有向图&#xff0c;该图由一个有…

作者头像 李华
网站建设 2026/11/1 17:31:35

Winhance v26.01.12 便携版:Windows 系统优化工具

Winhance v26.01.12 便携版是专为 Win10/Win11 打造的专业 Windows 系统优化工具&#xff0c;无需重装系统就能解决电脑卡顿、系统冗余等问题&#xff0c;帮助用户实现系统瘦身与性能提升&#xff0c;让新旧电脑都能拥有流畅运行体验&#xff0c;是 Windows 系统优化领域的实用…

作者头像 李华
网站建设 2026/11/2 4:08:05

STM32中I2C重入问题与中断处理图解说明

STM32中I2C重入问题与中断处理实战解析一个传感器读取失败的“灵异事件”你有没有遇到过这样的情况&#xff1a;系统运行几分钟都正常&#xff0c;突然一次温湿度数据跳变成0&#xff1f;或者日志里某个时间戳写进了错误的值&#xff1f;调试时用逻辑分析仪一抓——发现I2C总线…

作者头像 李华
网站建设 2026/11/2 3:05:44

基于STM32H7的串口不定长接收图解说明

一文搞懂STM32H7串口不定长接收&#xff1a;DMA 空闲中断的实战精髓 你有没有遇到过这样的场景&#xff1f; 设备通过串口发来一帧长度不固定的数据——可能是10字节的传感器采样&#xff0c;也可能是上百字节的配置命令。你用传统轮询方式处理&#xff0c;CPU占用飙到80%&am…

作者头像 李华
网站建设 2026/11/2 2:54:50

log_softmax和sigmoid防止溢出原理

1sum_softmax推理指数函数的输出永远最大只有 1&#xff0c;前面常量不涉及指数计算基本不会溢出。2 sigmoid的安全处理对于常见操作# 极易下溢出&#xff01;如果 logits 很小&#xff0c;pred 变成 0&#xff0c;log(0) 报错 pred torch.sigmoid(logits) loss torch.nn.BCE…

作者头像 李华