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 阅读更多 →

最新新闻

学生自用打分榜[特殊字符]2026论文工具真实测评|PaperXie优缺点一目了然✅

学生自用打分榜[特殊字符]2026论文工具真实测评|PaperXie优缺点一目了然✅

用过十几款论文工具后终于明白:好用的论文工具,从不是功能花哨,而是稳、免费、不翻车。 很多工具看着功能多,实则查重虚标、AI痕迹爆表、偷偷收录文稿、隐形扣费不断。 今天站在学生视角,以性价比、安全性、通过率、…

2026/7/23 14:26:57 阅读更多 →
AI、机器学习与深度学习的区别与应用场景解析

AI、机器学习与深度学习的区别与应用场景解析

1. 人工智能、机器学习与深度学习的层级关系 第一次接触AI领域时,我也曾被这三个术语搞得晕头转向。直到在图像识别项目中同时用到了三种技术,才真正理解它们的区别。简单来说,它们就像俄罗斯套娃——AI是最外层的概念,机器学习是…

2026/7/23 14:26:57 阅读更多 →
AI数字人变现困局破解手册,深度解析B端定制、C端订阅、IP衍生三大高毛利赛道

AI数字人变现困局破解手册,深度解析B端定制、C端订阅、IP衍生三大高毛利赛道

更多请点击: https://intelliparadigm.com 第一章:AI数字人变现困局的底层逻辑与破局起点 AI数字人正从技术演示走向商业化落地,但多数项目仍陷于“高投入、低转化、难复用”的循环。其根本症结并非算力或建模能力不足,而在于价值…

2026/7/23 14:26:57 阅读更多 →
VMD-CNN-LSTM混合算法在工业故障诊断中的应用与优化

VMD-CNN-LSTM混合算法在工业故障诊断中的应用与优化

1. 项目概述:MSO-VMD-CNN-LSTM/BILSTM混合算法在故障诊断中的应用2025年海市蜃楼(MSO)算法是一种新兴的智能诊断框架,它通过融合变分模态分解(VMD)、卷积神经网络(CNN)和长短时记忆网…

2026/7/23 14:26:57 阅读更多 →
【计算机毕业设计案例】基于 Django 的动态博客发布展示系统 个人创作内容收录与分享交流系统(程序+文档+讲解+定制)

【计算机毕业设计案例】基于 Django 的动态博客发布展示系统 个人创作内容收录与分享交流系统(程序+文档+讲解+定制)

博主介绍:✌️码农一枚 ,专注于大学生项目实战开发、讲解和毕业🚢文撰写修改等。全栈领域优质创作者,博客之星、掘金/华为云/阿里云/InfoQ等平台优质作者、专注于Java、小程序技术领域和毕业项目实战 ✌️技术范围:&am…

2026/7/23 14:26:57 阅读更多 →
昇腾Transformer加速库:工业级优化实践与性能提升

昇腾Transformer加速库:工业级优化实践与性能提升

1. 项目概述:Transformer加速库的工业级实践在自然语言处理和计算机视觉领域,Transformer架构已成为事实上的标准模型,但其庞大的计算需求始终是工程落地的首要障碍。华为开源的CANN ascend-transformer-boost库正是针对昇腾AI处理器设计的全…

2026/7/23 14:25:56 阅读更多 →

日新闻

从单点好评到指数级传播:AI副业主理人必须掌握的4层口碑渗透模型(含ROI测算表)

从单点好评到指数级传播:AI副业主理人必须掌握的4层口碑渗透模型(含ROI测算表)

更多请点击: https://intelliparadigm.com 第一章:从单点好评到指数级传播:AI副业主理人必须掌握的4层口碑渗透模型(含ROI测算表) 当AI副业主理人不再仅满足于单次服务交付,而是主动构建可复用、可裂变、可…

2026/7/23 0:00:25 阅读更多 →
AI写作开头钩子设计:为什么你的AI文案完读率不足18%?——基于2,346篇A/B测试报告的归因分析

AI写作开头钩子设计:为什么你的AI文案完读率不足18%?——基于2,346篇A/B测试报告的归因分析

更多请点击: https://codechina.net 第一章:AI写作开头钩子设计:为什么你的AI文案完读率不足18%?——基于2,346篇A/B测试报告的归因分析 在对2,346篇跨行业AI生成文案的A/B测试数据进行聚类分析后,我们发现&#xff1…

2026/7/23 0:01:26 阅读更多 →
Chitchatter完整指南:免费开源的终极点对点安全聊天工具

Chitchatter完整指南:免费开源的终极点对点安全聊天工具

Chitchatter完整指南:免费开源的终极点对点安全聊天工具 【免费下载链接】chitchatter Secure peer-to-peer chat that is serverless, decentralized, and ephemeral 项目地址: https://gitcode.com/gh_mirrors/ch/chitchatter Chitchatter是一款革命性的安…

2026/7/23 0:01:26 阅读更多 →

周新闻

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

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

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

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

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

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

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

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

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

2026/7/22 12:54:44 阅读更多 →

月新闻