恒美微站 Logo 恒美微站
  • 首页
  • 关于我们
  • 建站服务
  • 主题模板
  • 案例展示
  • 资讯中心
  • 联系我们

1218. 最长定差子序列

  • 首页
  • 资讯中心
  • /
  • 1218. 最长定差子序列

相关资讯

金融风控场景下Qwen-7B大模型微调实战指南 2026/8/2 18:33:45
视频本地化混合翻译方案:AI与人工的黄金比例 2026/8/2 18:33:45
如何为Nodejs后端服务配置Taotoken统一大模型调用接口 2026/8/2 18:33:46

最新资讯

“从‘物理按键‘到‘游戏指令‘,这趟旅程内部到底铺了几层轨道?“——深入 Unity 输入系统的底层架构
SAP FI-AA模块期初上线与会计分录生成全解析
Chrome图片格式转换终极指南:Save Image as Type完整教程
从零搭建CANoe测试工程:仿真模式、CAPL脚本与自动化测试框架详解
Claude Code SKILL进阶指南:从代码生成到AI工作流架构
一键备份QQ空间完整数据:你的青春记忆永久保存方案

今日推荐

CAD图库管理:从文件归档到设计资产管理的效率革命
5分钟掌握Wand-Enhancer:2026年终极WeMod专业版免费解锁指南
“Quality Control(质量控制)”在软件工程中通常指通过一系列活动确保软件产品符合预定的质量标准和用户需求

本周热门

ncmdumpGUI:一键解锁网易云音乐ncm文件的终极解决方案
分布式配置中心选型实战:Nacos与Consul在创业场景下的对比
MoneyPrinterPlus实战指南:AI视频批量生成与自动化发布完整解决方案

本月精选

如何用DamaiHelper实现演唱会门票的智能自动化抢购:完整技术解决方案指南
第4篇:59 倍性能差距的索引瓶颈定位——一次教科书级的全表扫描调优
终极歌词批量下载神器:5分钟解决离线音乐库歌词同步难题

1218. 最长定差子序列

发布时间:2026/8/7 1:37:10
1218. 最长定差子序列 题目描述给你一个整数数组arrarrarr和一个整数differencedifferencedifference请你找出并返回arrarrarr中最长等差子序列的长度该子序列中相邻元素之间的差等于differencedifferencedifference。子序列 是指在不改变其余元素顺序的情况下通过删除一些元素或不删除任何元素而从arrarrarr派生出来的序列。示例 1输入arr [1,2,3,4], difference 1输出4解释最长的等差子序列是 [1,2,3,4]。示例 2输入arr [1,3,5,7], difference 1输出1解释最长的等差子序列是任意单个元素。示例 3输入arr [1,5,7,8,5,3,4,2,1], difference -2输出4解释最长的等差子序列是 [7,5,3,1]。算法原理子序列问题可用动态规划解决状态表示dp[i]dp[i]dp[i]表示以iii为结尾的所有等差子序列中最长等差子序列的长度状态转移方程由于题目给定了差值differencedifferencedifference所以在知道arr[i]aarr[i] aarr[i]a的情况下可以推出它前面的那个值等于a−differenceba - difference ba−differenceb。因此当获得值aaa时就去arrarrarr的[0,i−1][0, i-1][0,i−1]区间中找一个值bbb根据bbb的情况有两种状态[0,i−1][0, i-1][0,i−1]区间中不存在bbb此时aaa自己为一个等差子序列dp[i]1dp[i] 1dp[i]1[0,i−1][0, i-1][0,i−1]区间中存在bbb此时aaa要跟在以bbb为结尾的等差子序列之后假设0ji−10 j i-10ji−1以bbb为结尾的等差子序列它的长度为dp[j]dp[j]dp[j]以aaa为结尾的等差子序列它的长度就是dp[j]1dp[j] 1dp[j]1但是如果这样做就要去遍历[0,i−1][0, i-1][0,i−1]区间了效率太低我们进行优化由于差值固定为differencedifferencedifference当得到arr[i]aarr[i] aarr[i]a时在[0,i−1][0, i-1][0,i−1]区间内找任意一个bbb均可得到以aaa为结尾的最长等差子序列长度所以使用一个哈希表hashhashhash保存某等差子序列最后一个值和该等差子序列长度的映射关系当得到aaa时在hashhashhash中查找bbbbbb不存在就保存hash[a]1hash[a] 1hash[a]1。bbb存在就保存hash[a]hash[b]1hash[a] hash[b] 1hash[a]hash[b]1并更新结果初始化刚开始哈希表什么都没有i0i 0i0时会得到aarr[0]a arr[0]aarr[0]在哈希表中查找[0,−1][0, -1][0,−1]区间上的值bbb肯定是找不到的此时会填入arr[0]0arr[0] 0arr[0]0所以哈希表不需要初始化填表顺序从左到右遍历arrarrarr填充哈希表返回值哈希表中的最大值代码classSolution{public:intlongestSubsequence(vectorintarr,intdifference){unordered_mapint,inthash;// 某等差子序列最后一个值 - 该等差子序列的长度intans1;for(inti0;iarr.size();i){intaarr[i];intba-difference;if(hash.find(b)!hash.end())// 之前有以 b 为结尾的子序列{intlenhash[b];hash[a]len1;// 在以 b 为结尾的子序列之后带上 aansmax(ans,len1);}else// 之前没有以 b 为结尾的子序列{hash[a]1;}}returnans;}};

关于恒美微站

恒美微站专注于为个体商户、工作室提供极简自助建站服务,让每个人都能轻松拥有专业网站。

快速链接

  • 关于我们
  • 建站服务
  • 主题模板
  • 案例展示
  • 资讯中心

服务项目

  • 可视化建站
  • 拖拽编辑
  • 主题定制
  • SEO 优化
  • 网站托管

联系方式

  • 📍 地址:北京市朝阳区建国路 88 号
  • 📞 电话:400-888-8888
  • ✉️ 邮箱:info@hmyw.cn
  • 🕐 时间:周一至周日 9:00-18:00

© 2024 恒美微站 hmyw.cn 版权所有 | 京 ICP 备 12345678 号