673. 最长递增子序列的个数
题目描述给定一个未排序的整数数组numsnumsnums 返回最长递增子序列的个数 。注意这个数列必须是严格递增的。示例 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。算法原理前置算法假设现在有一个数组nums[2,3,1,2,3]nums [2, 3, 1, 2, 3]nums[2,3,1,2,3]要求一次遍历求出这个数组中最大值的出现次数怎么做呢可以设置两个变量mmm和cntcntcntmmm用来记录最大值cntcntcnt用来记录最大值的出现次数初始化mnums[0]cnt1m nums[0]cnt1mnums[0]cnt1从左到右遍历numsnumsnums遍历时nums[i]mnums[i] mnums[i]m说明nums[i]nums[i]nums[i]不可能是最大值什么也不做nums[i]mnums[i] mnums[i]m说明nums[i]nums[i]nums[i]是假定的最大值cntcntcntnums[i]mnums[i] mnums[i]m说明nums[i]nums[i]nums[i]更大是可能的最大值更新mnums[i],cnt1m nums[i], cnt 1mnums[i],cnt1当遍历完时mmm就保存了最大值cntcntcnt就保存了最大值的出现次数动态规划状态表示子序列问题一般以经验题目要求得到经验就是以某一个位置为结尾题目要求就是最长递增子序列的个数所以count[i]count[i]count[i]表示以iii位置为结尾的所有子序列中最长递增子序列的个数。由于不知道最长递增子序列长度所以根本求不了个数所以还需要一个数组lenlenlenlen[i]len[i]len[i]表示以iii位置为结尾的所有子序列中最长递增子序列的长度。状态表示可总结为count[i]count[i]count[i]以iii位置为结尾的所有子序列中最长递增子序列的个数len[i]len[i]len[i]以iii位置为结尾的所有子序列中最长递增子序列的长度状态转移方程以iii位置为结尾的子序列可以分为长度1 11和长度1 11的。根据前置算法可以同时填count,lencount, lencount,len两个表对于长度1 11的子序列最长递增子序列只有它自己所以len[i]1,count[i]1len[i] 1, count[i] 1len[i]1,count[i]1对于长度1 11的子序列一般是以i−1,i−2,...,0i-1, i-2, ..., 0i−1,i−2,...,0位置元素为结尾的最长递增子序列再带上iii位置上的元素。假设0ji−10 j i-10ji−1如果nums[j]nums[i]nums[j] nums[i]nums[j]nums[i]说明iii位置元素可以跟在以jjj位置元素为结尾的最长递增子序列之后此时新最长递增子序列的长度就是以jjj位置元素为结尾的最长递增子序列长度1 11也就是len[j]1len[j] 1len[j]1。如果len[j]1len[i]len[j] 1 len[i]len[j]1len[i]说明又出现了一个可能的最长递增子序列统计最长递增子序列的个数count[i]count[j]count[i] count[j]count[i]count[j]。如果len[j]1len[i]len[j] 1 len[i]len[j]1len[i]说明不可能是最长递增子序列此时啥也不做。如果len[j]1len[i]len[j] 1 len[i]len[j]1len[i]说明有更长的最长递增子序列更新len[i]len[j]1,count[i]count[j]len[i] len[j] 1, count[i] count[j]len[i]len[j]1,count[i]count[j]初始化以每个位置为结尾的最长递增子序列长度至少为111至少有111个所以初始化len,countlen, countlen,count为全111填表顺序从左到右返回值使用一次遍历的思想遍历len,countlen, countlen,count来找到最大的长度统计出现次数代码classSolution{public:intfindNumberOfLIS(vectorintnums){intnnums.size();vectorintlen(n,1),count(n,1);intmaxLenlen[0],cntcount[0];for(inti1;in;i){for(intji-1;j0;--j)// 找到以 [0, i-1] 结尾的递增子序列长度{if(nums[i]nums[j])// 能构成以 i 结尾的递增子序列{if(len[j]1len[i])// 当前递增子序列的长度 假定的最长递增子序列长度{count[i]count[j];// 更新最长递增子序列的个数}elseif(len[j]1len[i])// 当前递增子序列的长度 假定的最长递增子序列长度{len[i]len[j]1;// 更新最长递增子序列长度count[i]count[j];// 更新最长递增子序列的个数}}}if(len[i]maxLen){cntcount[i];}elseif(len[i]maxLen){maxLenlen[i];cntcount[i];}}returncnt;}};

相关新闻

2026论文双检新规避坑|别只查重不降AI痕!Okbiye实测,90%同学都在踩的毕业雷区

2026论文双检新规避坑|别只查重不降AI痕!Okbiye实测,90%同学都在踩的毕业雷区

2026年毕业最大误区:论文重复率过了,就等于稳过答辩。 现在高校早已不是单一查重审核,知网/维普查重率 AI写作痕迹检测双检并行成为硬性标准。很多同学花几百块查重、反复降重,最后重复率达标,却被AI机器痕迹判定不合…

2026/7/22 9:40:23 阅读更多 →
瑞芯微RV1126B开发板(EASY-EAI-PI2) 网络摄像头方案

瑞芯微RV1126B开发板(EASY-EAI-PI2) 网络摄像头方案

1. 方案简介 本方案将演示如何利用EASY-EAI-PI2以及MIPI-CSI摄像头制作一个【网络摄像头(IPCamera)】:两路MIPI-CSI摄像头分别单独输出两路流。 1.1 接线示意图 摄像头与板卡连接: https://www.easy-eai.com/ (二维码自动识别) 板卡与局域网连接&am…

2026/7/22 9:40:23 阅读更多 →
UE4 Shader变体优化实战:从源头控制到打包剔除,解决性能与包体膨胀

UE4 Shader变体优化实战:从源头控制到打包剔除,解决性能与包体膨胀

1. 项目概述:Shader变体,一个被忽视的性能与包体“黑洞” 如果你是一名UE4开发者,尤其是负责过移动端或对包体大小有严格要求的项目,那么“Shader变体”这个词,很可能已经让你头疼过不止一次了。它不像一个明显的Bug那…

2026/7/22 9:40:23 阅读更多 →

最新新闻

技术人如何用2D绘图工具提升编程思维与工作效率

技术人如何用2D绘图工具提升编程思维与工作效率

昨晚调试代码到凌晨三点,窗外雨声渐起。这种时候最适合打开本地部署的绘图工具,随手跑几张图——不是为了赶项目进度,只是想把那种“雨打键盘声渐密”的状态具象化。结果生成了十几张“程序员深夜听雨图”,有的键盘泡在水里&#…

2026/7/22 10:28:43 阅读更多 →
PCIe技术解析:高速串行总线的原理与应用

PCIe技术解析:高速串行总线的原理与应用

1. PCIe技术概述:从并行到串行的革命PCI Express(Peripheral Component Interconnect Express)是现代计算机系统中最重要的内部总线标准之一。作为PCI技术的进化版本,PCIe彻底改变了传统并行总线的设计理念,采用高速串…

2026/7/22 10:28:43 阅读更多 →
使用密度:能力边界不是想出来的

使用密度:能力边界不是想出来的

Agent 的能力边界很难靠少量试用判断。一天问一两个问题,得到的往往只是“能不能答”;高频使用后,才会慢慢看清它适合直接做什么,什么任务需要先拆,什么环节必须加验证,哪些流程值得沉淀成 skill、脚本或自…

2026/7/22 10:28:43 阅读更多 →
产业元宇宙虚实共建引擎:重构制造业数字底座的核心逻辑

产业元宇宙虚实共建引擎:重构制造业数字底座的核心逻辑

在工业4.0向纵深发展的当下,制造业数字化转型已从单纯的“业务上云”迈向“数据入实”的新阶段。传统的数字孪生往往停留在可视化大屏的展示层面,缺乏对物理世界的实时反向控制与深度交互能力。而“产业元宇宙”概念的提出,核心在于构建一个能…

2026/7/22 10:28:43 阅读更多 →
TMS320F2837xS McBSP寄存器配置详解与实战避坑指南

TMS320F2837xS McBSP寄存器配置详解与实战避坑指南

1. McBSP寄存器概览与核心设计思路 在嵌入式DSP开发中,串行通信接口的配置往往是项目成败的关键一环。TMS320F2837xS系列微控制器集成的多通道缓冲串行端口(McBSP)功能强大,但寄存器数量众多、功能交织,初次接触时很容…

2026/7/22 10:28:43 阅读更多 →
大模型应用从Demo到生产,Java后端该补算法还是工程基建?

大模型应用从Demo到生产,Java后端该补算法还是工程基建?

如果你正准备往大模型方向转,《大模型岗位变了,Java工程师该补的还是算法吗?》这类问题别只看热度。更重要的是判断自己该补哪块能力,以及怎么证明你真的会。摘要先把这篇文章的目标说清楚:看完之后,你应该…

2026/7/22 10:27:42 阅读更多 →

日新闻

TI DSP系统配置模块SYSCFG详解:中断机制与主设备优先级配置实战

TI DSP系统配置模块SYSCFG详解:中断机制与主设备优先级配置实战

1. 项目概述与SYSCFG模块的核心价值在嵌入式系统,尤其是像TI C6000系列这样的高性能DSP开发中,我们常常会与芯片手册里那些密密麻麻的寄存器打交道。很多开发者可能更关注算法实现、内存优化或者外设驱动,但对于一个稳定、高效的系统而言&…

2026/7/22 0:00:26 阅读更多 →
微信Server酱:高到达率的应急通知方案实践

微信Server酱:高到达率的应急通知方案实践

1. 为什么我们需要"最次"的通知方案? 在数字化协作环境中,消息通知系统的重要性不言而喻明。但现实情况是,企业级通知方案往往需要复杂的API对接(如企业微信、钉钉、飞书),个人开发者的小项目又经…

2026/7/22 0:00:26 阅读更多 →
甲方要的“简洁“PPT,到底是简洁还是省事?

甲方要的“简洁“PPT,到底是简洁还是省事?

甲方说"简洁一点",乙方听到的是"少做几页"。甲方说"不要太复杂",乙方理解成"别放图表了"。结果交过去,甲方说"我说的简洁不是这个意思"。"简洁"这个词在PPT语境里,是…

2026/7/22 0:00:26 阅读更多 →

周新闻

Go语言静态资源打包方案对比与实践指南

Go语言静态资源打包方案对比与实践指南

1. 项目背景与核心需求在Go语言开发中,我们经常需要处理静态资源文件的打包问题。无论是Web应用的模板文件、前端资源,还是配置文件、证书等,都需要随程序一起分发。传统做法是将这些文件与编译后的二进制文件放在同一目录下,但这…

2026/7/22 8:58:19 阅读更多 →
Go语言实现高性能LDAP认证服务的架构与实践

Go语言实现高性能LDAP认证服务的架构与实践

1. 项目背景与核心价值LDAP(轻量级目录访问协议)作为企业级身份认证的黄金标准,已经服务了超过80%的财富500强公司。我在金融科技领域实施统一认证体系时,发现传统Java方案存在启动慢、内存占用高等痛点。而Go语言凭借其协程并发模…

2026/7/21 5:34:47 阅读更多 →
【AI面试官实战指南】:用ChatGPT模拟10类高频技术岗面试,3天提升应答精准度92%

【AI面试官实战指南】:用ChatGPT模拟10类高频技术岗面试,3天提升应答精准度92%

更多请点击: https://intelliparadigm.com 第一章:AI面试官实战指南的核心价值与适用场景 AI面试官并非替代人类HR的“黑箱工具”,而是以可解释、可审计、可迭代的方式,赋能招聘全链路的关键基础设施。其核心价值在于将主观经验沉…

2026/7/21 8:25:39 阅读更多 →

月新闻