千问    LeetCode 3915. 距离至少为 K 的交替子序列的最大和 Rust实现
这道题是 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)Rust 实现use std::cmp::max;use std::collections::BTreeSet;struct FenwickTree {n: usize,tree: Veci64,}impl FenwickTree {fn new(n: usize) - Self {FenwickTree {n,tree: vec![i64::MIN / 2; n 2], // 初始化为极小值}}// 单点取 max 更新fn update(mut self, mut idx: usize, val: i64) {while idx self.n {self.tree[idx] max(self.tree[idx], val);idx idx idx.wrapping_neg(); // idx idx (-idx)}}// 前缀最大值查询 [1, idx]fn query(self, mut idx: usize) - i64 {let mut res i64::MIN / 2;while idx 0 {res max(res, self.tree[idx]);idx - idx idx.wrapping_neg();}res}}impl Solution {pub fn max_alternating_sum(nums: Veci32, k: i32) - i64 {let n nums.len();let k k as usize;// 1. 值域离散化let mut sorted: Veci32 nums.clone();sorted.sort();sorted.dedup();let m sorted.len();// 2. 两棵树状数组// bit_down维护 down 值用于查询值小于当前值的最大 down// bit_up_rev维护 up 值倒序坐标用于查询值大于当前值的最大 uplet mut bit_down FenwickTree::new(m);let mut bit_up_rev FenwickTree::new(m);let mut up vec![0i64; n];let mut down vec![0i64; n];let mut ans 0i64;for i in 0..n {// 3. 延迟激活把 i-k 位置的状态加入树状数组if i k {let prev i - k;let prev_rank sorted.binary_search(nums[prev]).unwrap() 1; // 1-basedbit_down.update(prev_rank, down[prev]);bit_up_rev.update(m - prev_rank 1, up[prev]); // 倒序映射后缀变前缀}let cur_rank sorted.binary_search(nums[i]).unwrap() 1; // 1-based// 4. 状态转移// up[i]前一个值 nums[i]从 bit_down 查询值域 [1, cur_rank-1] 的最大 downlet best_down bit_down.query(cur_rank - 1);up[i] nums[i] as i64 if best_down i64::MIN / 2 { 0 } else { best_down };// down[i]前一个值 nums[i]从 bit_up_rev 查询值域 [cur_rank1, m] 的最大 uplet best_up bit_up_rev.query(m - cur_rank);down[i] nums[i] as i64 if best_up i64::MIN / 2 { 0 } else { best_up };ans max(ans, max(up[i], down[i]));}ans}}关键点解析- 值域离散化nums[i] 最大 10⁵但实际不同值最多 n 个离散化后压缩到 [1, m]树状数组大小可控- 延迟激活这是处理下标距离 ≥ k的关键技巧——遍历时不立即把当前状态加入树状数组而是等 k 步后再加入这样查询时自然只看到距离 ≥ k 的前驱状态- 后缀查询技巧树状数组天然支持前缀查询要查值大于当前值的最大值把排名 r 反转为 m - r 1就把后缀查询变成了前缀查询- Rust 特有注意点idx (-idx) 在 Rust 中需要用 idx idx.wrapping_neg() 来避免无符号整数的取负溢出问题树状数组初始值设为 i64::MIN / 2 防止加法溢出- 时间复杂度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 的通用模板整理出来吗

相关新闻

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

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

这道题是 LeetCode 3915「距离至少为 K 的交替子序列的最大和」,核心思路是 DP 值域离散化 树状数组(Fenwick Tree)优化,将复杂度从 O(n) 降到 O(n log n)。题目理解给定数组 nums 和整数 k,选一个下标严格递增的子序…

2026/10/24 0:12:44 阅读更多 →
TVA具身智能技术图谱(23):协同认知与语义压缩机制

TVA具身智能技术图谱(23):协同认知与语义压缩机制

前沿技术探索:TVA智能体(简称TVA)TVA智能体(亦称“AI智能体视觉”或“TVA视觉智能体”)是依托Transformer架构与“因式智能体”理论构建的系统级视觉技术框架。它融合深度强化学习(DRL)、卷积神…

2026/10/25 15:04:39 阅读更多 →
TVA具身智能技术图谱(22):跨域迁移与策略复用机制

TVA具身智能技术图谱(22):跨域迁移与策略复用机制

前沿技术探索:TVA智能体(简称TVA)TVA智能体(亦称“AI智能体视觉”或“TVA视觉智能体”)是依托Transformer架构与“因式智能体”理论构建的系统级视觉技术框架。它融合深度强化学习(DRL)、卷积神…

2026/10/25 2:00:12 阅读更多 →

最新新闻

Electron桌面应用开发实战:从环境搭建到打包发布全流程

Electron桌面应用开发实战:从环境搭建到打包发布全流程

做前端这些年,我大部分时间都在跟浏览器标签页打交道,直到第一次把桌面应用跑起来,才发现原来自己一直被限制在地址栏和刷新按钮围起来的框框里。Electron这个词,最开始是在某段时间频繁出现在同事的讨论里,一个用HTML…

2026/10/26 12:00:21 阅读更多 →
滑盖智能锁T109深度解析:结构原理、安装调试与故障排查

滑盖智能锁T109深度解析:结构原理、安装调试与故障排查

简介:亚太天能T109滑盖智能锁产品说明书是一份PDF格式的官方技术文档,主要面向智能锁安装人员、终端用户及售后维护者,帮助快速掌握产品安装、配置与常见故障处理。全包仅1个PDF文件,大小4.37MB,内容结构清晰&#xff…

2026/10/25 22:36:10 阅读更多 →
PMSM弱磁控制原理与Simulink建模:高速AGV驱动系统设计指南

PMSM弱磁控制原理与Simulink建模:高速AGV驱动系统设计指南

上个月我在调试一台高速AGV的驱动系统,整车要求空载跑到8m/s,电机转速已经拉到额定点,驱动器的输出电压也顶到了母线电压极限附近。再往上踩速度指令,转速纹丝不动,三相电流反而开始震荡。那会儿我的第一反应就是&…

2026/10/26 4:52:12 阅读更多 →
C++核心知识点:从内存管理到STL的实战指南

C++核心知识点:从内存管理到STL的实战指南

C 这门语言我前前后后折腾了十几年,用它写过嵌入式驱动、做过游戏服务端,也搭过基础组件库。每次看到新人一头扎进"C 核心知识点"这个搜索词,我其实挺感慨的——这门语言的难点从来不是语法多,而是知识点之间的耦合太深…

2026/10/26 12:00:21 阅读更多 →
T109滑盖智能锁怎么装?安装调试与故障排查全攻略

T109滑盖智能锁怎么装?安装调试与故障排查全攻略

简介:亚太天能T109滑盖智能锁产品说明书以PDF格式发布,适合智能锁用户、安装人员与售后维修人员阅读。内容围绕T109系列指纹密码刷卡锁展开,先介绍前面板、后面板、锁体、机械钥匙、电池盒盖等部件名称与功能,再给出完整安装步骤&…

2026/10/26 5:00:37 阅读更多 →
LLM知识降熵:从信息垄断到理解权下放

LLM知识降熵:从信息垄断到理解权下放

你有没有过这种经历:翻开源码注释、论文摘要或者一份专业报告,每个字都认识,连在一起却像天书。想找人聊聊,身边要么没人懂,要么懂的懒得跟你解释。后来我试着把同一段内容丢给一个大语言模型,几秒钟之后&a…

2026/10/26 3:16:46 阅读更多 →

日新闻

周新闻

月新闻

我发现了一个新思路:用 Remotion + Claude Code 像写代码一样自动化生成短视频

我发现了一个新思路:用 Remotion + Claude Code 像写代码一样自动化生成短视频

/* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views …

2026/10/26 12:00:19 阅读更多 →
Windows下 Codex 中 Chrome 和 Computer Use 插件不可用问题排查及解决参考方式:TaoToken 统一 Key 配置与验证

Windows下 Codex 中 Chrome 和 Computer Use 插件不可用问题排查及解决参考方式:TaoToken 统一 Key 配置与验证

/* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views …

2026/10/25 13:21:54 阅读更多 →
黑夜航拍船只数据集训练YOLOV5模型全流程解析

黑夜航拍船只数据集训练YOLOV5模型全流程解析

/* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views …

2026/10/26 8:34:37 阅读更多 →