最长递增子序列的个数

本文参考代码随想录

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

示例 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.mzph.cn/news/1156427.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

【c++进阶】再谈虚函数

关注我&#xff0c;学习c不迷路: 个人主页&#xff1a;爱装代码的小瓶子 专栏如下&#xff1a; c学习Linux学习 后续会更新更多有趣的小知识&#xff0c;关注我带你遨游知识世界 期待你的关注。 文章目录深入探索C虚函数&#xff1a;从编译器视角看多态的“幕后魔法”1. 一…

I2C通信协议工业级设计要点:核心要点

工业级I2C通信设计实战&#xff1a;从信号完整性到系统容错的全链路优化 你有没有遇到过这样的场景&#xff1f; 一个本该稳定运行的工业传感器网络&#xff0c;突然开始频繁丢包&#xff1b;某台设备上的温度读数卡死不动&#xff0c;重启后又恢复正常&#xff1b;更糟的是&a…

Proteus 8.9环境搭建教程:全面讲解安装细节

从零搭建Proteus 8.9仿真环境&#xff1a;手把手带你避开每一个坑你是不是也曾在安装Proteus时被各种“找不到许可”、“服务无法启动”、“MCU不运行”的报错搞得焦头烂额&#xff1f;明明按照网上的教程一步步来&#xff0c;结果一打开软件就弹窗警告——别急&#xff0c;这并…

杰理芯片SDK开发-AD697N添加按键触摸提示音功能教程

前言 到现在为止也开发了许多杰理TWS蓝牙耳机项目SDK的案子&#xff0c;在调试案子时不断的向前辈们学习到了很多关于蓝牙TWS耳机专业的知识。想在这里做一个学习汇总&#xff0c;方便各位同行和对杰理芯片SDK感兴趣的小伙伴们学习&#xff1b; 本章详细讲解杰理AD697N芯片按键…

1.13草花互动面试

1. 浏览器输入网址到服务器的完整流程&#xff08;从 DNS 解析到页面渲染&#xff09;怎么答&#xff1a;“当我在浏览器输入一个网址&#xff08;比如 https://www.example.com&#xff09;并回车后&#xff0c;整个过程大致是这样的&#xff1a;DNS 解析&#xff1a;浏览器把…

Cortex-M ISR响应延迟优化完整示例

如何让 Cortex-M 的中断快到“无感”&#xff1f;——ISR 响应延迟优化实战全解析在嵌入式系统的世界里&#xff0c;“快”从来不是目的&#xff0c;而是生存的底线。你有没有遇到过这样的场景&#xff1a;电机控制环路突然失稳、音频播放咔哒作响、通信数据包莫名丢失……排查…

芯片验证工程师的写代码能力不是第一位

很多人以为验证工程师就是搭环境、跑仿真。但这只是表面工作。验证的核心在于发现问题&#xff0c;而不是证明设计正确。举个实际的例子&#xff1a;某个FIFO模块在正常读写测试下运行完美&#xff0c;覆盖率也达到了100%。但有个验证工程师在review代码时问了一句&#xff1a;…

IAR软件编译选项设置深度剖析与优化建议

深入IAR编译器&#xff1a;从配置到实战的性能调优全解析在嵌入式开发的世界里&#xff0c;一个常被忽视却至关重要的环节是——编译器不是“翻译机”&#xff0c;而是系统性能的塑造者。许多工程师习惯性地把代码写完后点击“Build”&#xff0c;看到绿色对勾就认为万事大吉。…

断言:让芯片设计工程师又爱又恨

断言(Assertion)&#xff0c;说白了&#xff0c;它就是设计工程师在代码里埋下的一个个”判断点”&#xff0c;时刻监控着信号是不是符合预期。什么是断言&#xff1f;举个最简单的例子&#xff1a;assert property ((posedge clk) (req |-> ##[1:2] ack));这段代码的意思是…

JFlash烧录固件的完整指南与调试技巧

JFlash烧录实战&#xff1a;从连接失败到量产自动化的深度通关指南你有没有遇到过这样的场景&#xff1f;凌晨两点&#xff0c;产线停摆&#xff0c;几十块板子卡在“Cannot connect to target”的报错界面上&#xff1b;又或者&#xff0c;明明烧录成功了&#xff0c;程序却死…

尾调用搞懂了,JS性能直接起飞?前端人别再被面试官问懵了!

尾调用搞懂了&#xff0c;JS性能直接起飞&#xff1f;前端人别再被面试官问懵了&#xff01;尾调用搞懂了&#xff0c;JS性能直接起飞&#xff1f;前端人别再被面试官问懵了&#xff01;为啥每次面试都被问“尾调用优化”&#xff1f;尾调用到底是个啥玩意儿手把手看代码&#…

程序员如何在技术变革中保持竞争力

程序员如何在技术变革中保持竞争力 关键词:程序员、技术变革、竞争力、持续学习、技能多元化 摘要:随着科技的飞速发展,技术变革日新月异,程序员面临着前所未有的挑战。本文旨在探讨程序员在技术变革中保持竞争力的有效方法。通过对背景的介绍,明确了文章的目的、读者群体…

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

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

C#热更原理:为何原生不支持DLL替换?

先把问题摆在桌面上: 做 Unity / .NET 游戏热更新的时候,大家老会说一句: “C# 原生不支持运行时替换 DLL,所以得上 ILRuntime / HybridCLR / Lua 等方案。” 听多了你可能会问: 为啥 C# 就不能像脚本语言那样,想换逻辑就把 DLL 替换了? 反正 DLL 不就是一堆字节吗,我重…

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

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

2026年安徽省职业院校技能大赛(高职组) 电子数据取证与分析(学生赛)样题任务书

2026年安徽省职业院校技能大赛&#xff08;高职组&#xff09;电子数据取证与分析&#xff08;学生赛&#xff09;赛项电子数据取证技术与应用技能竞赛样题模块一&#xff1a;计算机数据分析&#xff08;35 分&#xff09;1.对 Windows 计算机镜像进行分析&#xff0c;用户硬盘…

Go进阶之协程

1.协程的概念:1.1基本概念:1).进程:进程是应用启动的实例.每个进程都有自己独立的内存空间.不同的进程通过进程间的通信方式来通信.2).线程:线程从属于进程.每个进程至少包含一个线程.线程是CPU调度的基本单位.多个线程之前共享进程资源并通过共享内存等线程间的通信方式通信.3…

抗干扰PCB工艺设计:工业电子一文说清

工业电子抗干扰PCB设计&#xff1a;从原理到实战&#xff0c;一文讲透在工厂车间里&#xff0c;一台PLC控制器突然死机&#xff0c;产线被迫停摆。排查数小时后发现&#xff0c;并非软件出错&#xff0c;也不是元器件损坏——而是PCB板上的一个地平面被割裂&#xff0c;导致ADC…

2026年安徽省职业院校技能大赛(高职组) 电子数据取证与分析(学生赛)赛项规程

2026年安徽省职业院校技能大赛&#xff08;高职组&#xff09; 电子数据取证与分析&#xff08;学生赛&#xff09;赛项规程一、赛项名称二、竞赛目标三、竞赛方式与内容五、竞赛规则软件列表&#xff1a;五、赛场预案六、赛项安全七、竞赛须知八、申诉与仲裁需要拿奖可以私信博…

Vue.js 前端开发实战 ( 电子版 ) —— 黑马

点击这里 | Vue.js 前端开发实战 ( 上 ) —— 黑马 | ⚡️⚡️⚡️ 点击这里 | Vue.js 前端开发实战 ( 下 ) —— 黑马 | ⚡️⚡️⚡️ 最后结语 Github: https://github.com/Parker-Cui Gitee: https://gitee.com/cui_pe_ng_fei Juejin: https://juejin.cn/user/2276467567…