news 2026/5/31 0:54:41

最长递增子序列的个数

作者头像

张小明

前端开发工程师

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/5/29 1:31:31

AI SaaS产品的数据管道架构:实时处理方案

AI SaaS产品的数据管道架构&#xff1a;实时处理方案关键词&#xff1a;AI SaaS产品、数据管道架构、实时处理、数据流动、架构设计摘要&#xff1a;本文聚焦于AI SaaS产品的数据管道架构实时处理方案。首先介绍了相关背景知识&#xff0c;让大家明白为什么要关注实时处理以及预…

作者头像 李华
网站建设 2026/5/28 23:13:49

FileMasterPro v1.2.5:全能多功能文件管理工具

FileMasterPro v1.2.5 是专为 Windows 系统打造的专业文件管理工具&#xff0c;集成极速搜索、加密保险箱、智能整理、批量重命名及重复文件查重等核心功能&#xff0c;兼顾安全性与便捷性&#xff0c;轻松解决个人及办公场景中的海量文件管理难题。快速搜索与结果筛选作为高效…

作者头像 李华
网站建设 2026/5/30 23:47:41

嵌入式系统前级验证:Multisim仿真信号完整性分析

用Multisim提前“预演”信号问题&#xff1a;嵌入式系统前级验证实战指南你有没有遇到过这样的场景&#xff1f;PCB板子刚回来&#xff0c;焊上芯片一通电&#xff0c;发现ADC读数跳得像心电图&#xff0c;SPI通信时不时丢包&#xff0c;MCU莫名其妙复位……查来查去&#xff0…

作者头像 李华
网站建设 2026/5/30 7:13:07

基于STM32F4的GPIO初始化STM32CubeMX教程实战案例

从零开始点亮LED&#xff1a;STM32F4 STM32CubeMX实战入门指南你有没有过这样的经历&#xff1f;手头一块崭新的STM32F4开发板&#xff0c;USB线插上&#xff0c;IDE打开&#xff0c;却卡在第一步——怎么让一个最简单的LED闪烁起来&#xff1f;别急。这并不是你基础差&#x…

作者头像 李华