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

千问 LeetCode 3915. 距离至少为 K 的交替子序列的最大和 Python3实现

  • 首页
  • 资讯中心
  • /
  • 千问 LeetCode 3915. 距离至少为 K 的交替子序列的最大和 Python3实现

相关资讯

千问 LeetCode 3915. 距离至少为 K 的交替子序列的最大和 Rust实现 2026/8/16 23:35:34
ERR_CONTENT_LENGTH_MISMATCH 200错误:从HTTP协议到实战排查的完整指南 2026/8/16 23:30:34
Windows本地账户密码重置:从原理到实战的四种解锁方案详解 2026/8/16 23:30:34

最新资讯

CPU散热器均热板技术深度解析:原理、适用场景与性能实测
ROS框架在电赛运动控制中的降维打击:从PID到成熟机器人方案
越华环保集团污水端边云数采架构:适配美丽河湖项目的数字化污水治理全链路设计
阴阳师自动化脚本OAS四连问:从值不值得装到怎么玩出花
2026年建材行业豆包优化方案:如何让AI主动推荐你的品牌
Windows Cleaner 完整入门指南:让C盘空间不足彻底成为历史

今日推荐

LabVIEW异步调用实战:从原理到生产者消费者模式,解决界面卡顿与并行处理难题
LabVIEW异步调用实战:解决界面卡顿与并行处理难题
飞书局域网文件传输实战:3种方案实现高速点对点传输

本周热门

【文章复现】非线性值迭代自适应动态规划(ADP):离散时间非线性系统的策略迭代自适应动态规划算法研究附Matlab代码
【双层规划,节点出清价,绿证交易,CVaR方法】两级电力市场环境下计及风险的省间交易商最优购电模型附Matlab代码
隐式mpc+自适应mpc+时变mpc,线性时变模型预测控制附Simulink仿真

本月精选

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

千问 LeetCode 3915. 距离至少为 K 的交替子序列的最大和 Python3实现

发布时间:2026/8/16 23:35:34
千问    LeetCode 3915. 距离至少为 K 的交替子序列的最大和 Python3实现 这道题是 LeetCode 3915「距离至少为 K 的交替子序列的最大和」核心思路是 DP 值域离散化 树状数组Fenwick Tree优化将复杂度从 O(n²) 降到 O(n log n)。题目理解给定数组 nums 和整数 k选一个下标严格递增的子序列满足1. 相邻选中下标之差 ≥ k2. 选出的值严格交替小大 或 大小 波动不能相等3. 求最大和核心思路1. DP 状态up[i] 表示以 nums[i] 结尾、最后一步是递增前一个值 当前值的最大和down[i] 表示以 nums[i] 结尾、最后一步是递减的最大和2. 转移逻辑- up[i] nums[i] max{down[j]}其中 j ≤ i-k 且 nums[j] nums[i]- down[i] nums[i] max{up[j]}其中 j ≤ i-k 且 nums[j] nums[i]3. 延迟激活只有当 i ≥ k 时才把 i-k 位置的状态加入树状数组保证下标距离 ≥ k4. 树状数组优化用两棵树状数组分别维护值小于当前值和值大于当前值的最大 DP 值查询/更新均为 O(log n)Python 实现class FenwickTree:def __init__(self, size):self.n sizeself.INF -10**18self.tree [self.INF] * (self.n 2)def update(self, idx: int, val: int):while idx self.n:if val self.tree[idx]:self.tree[idx] validx idx -idxdef query(self, idx: int) - int:res self.INFwhile idx 0:if self.tree[idx] res:res self.tree[idx]idx - idx -idxreturn resclass Solution:def maxAlternatingSum(self, nums: list[int], k: int) - int:n len(nums)# 1. 值域离散化unique_nums sorted(set(nums))rank {v: i 1 for i, v in enumerate(unique_nums)} # 1-basedm len(unique_nums)INF -10**18# 2. 两棵树状数组# bit_down维护 down 值用于查询值小于当前值的最大 down# bit_up_rev维护 up 值倒序坐标用于查询值大于当前值的最大 upbit_down FenwickTree(m)bit_up_rev FenwickTree(m)up [0] * ndown [0] * nmax_ans 0for i in range(n):# 3. 延迟激活把 i-k 位置的状态加入树状数组if i - k 0:prev i - kr rank[nums[prev]]bit_down.update(r, down[prev])bit_up_rev.update(m - r 1, up[prev]) # 倒序映射后缀变前缀cur_r rank[nums[i]]# 4. 状态转移# up[i]前一个值 nums[i]从 bit_down 查询值域 [1, cur_r-1] 的最大 downbest_down bit_down.query(cur_r - 1)up[i] nums[i] (best_down if best_down ! INF else 0)# down[i]前一个值 nums[i]从 bit_up_rev 查询值域 [cur_r1, m] 的最大 upbest_up bit_up_rev.query(m - cur_r)down[i] nums[i] (best_up if best_up ! INF else 0)max_ans max(max_ans, up[i], down[i])return max_ans关键点解析- 值域离散化nums[i] 最大 10⁵但实际不同值最多 n 个离散化后压缩到 [1, m]树状数组大小可控- 延迟激活这是处理下标距离 ≥ k的关键技巧——遍历时不立即把当前状态加入树状数组而是等 k 步后再加入这样查询时自然只看到距离 ≥ k 的前驱状态- 后缀查询技巧树状数组天然支持前缀查询要查值大于当前值的最大值把排名 r 反转为 m - r 1就把后缀查询变成了前缀查询- 时间复杂度O(n log n)空间 O(n)示例验证- nums [5,4,2], k 2选下标 [0,2]值 [5,2]距离 2-02≥k52 严格交替得分 7 ✅- nums [3,5,4,2,4], k 1选下标 [0,1,3,4]值 [3,5,2,4]3524 严格交替得分 14 ✅- nums [5], k 1长度为 1 始终有效得分 5 ✅这道题的难点在于延迟激活 树状数组优化区间最值的组合需要我帮你把树状数组优化 DP这类题的通用模板整理出来吗

关于恒美微站

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

快速链接

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

服务项目

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

联系方式

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

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