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

Kimi LeetCode 3721. 最长平衡子数组 II Rust实现

  • 首页
  • 资讯中心
  • /
  • Kimi LeetCode 3721. 最长平衡子数组 II Rust实现

相关资讯

7大MASA模组完整汉化方案:解决Minecraft高级用户的语言障碍难题 2026/8/2 18:22:02
音乐解锁神器:3分钟让你的加密音乐重获自由 [特殊字符] 2026/8/2 6:39:49
TVBoxOSC终极安装配置指南:从零开始打造完美电视播放体验 2026/8/2 18:22:03

最新资讯

基于 Trae 的 PHP 环境搭建:从 setting.json 到插件配置的完整实践
BongoCat GPUI 设置界面 Spike 实战指南:gpui 0.2.2 的窗口生命周期、运行时桥接与自动化探针
Attention is all you need?从Encoder到Decoder拆解Transformer的Self-Attention机制
跳表详细解析
Smartstore导出框架详解:配置文件、过滤器、映射与投影全解析
DeepSeek Harness 桌面端:大模型测试工作流可视化实战

今日推荐

企业AI转型实战指南:从场景选择到落地避坑的完整路线图
OpenRig:本地大模型服务编排的轻量级运行时框架
夸克网盘1TB免费扩容领取全攻略:新老用户实操流程与避坑指南

本周热门

从像素到笔画:srt-whiteboard-animation骨架笔迹追踪实现(Zhang-Suen细化+8邻接追踪)
网站建设的英语怎么说?别只背单词,看完这套安全完整流程才敢上线
新手入门看这篇:建设网站加盟避坑指南与SEO实操

本月精选

我发现了一个新思路:用 Remotion + Claude Code 像写代码一样自动化生成短视频
Windows下 Codex 中 Chrome 和 Computer Use 插件不可用问题排查及解决参考方式:TaoToken 统一 Key 配置与验证
2026 大模型集体涨价:用 Python 做企业 Token 成本测算与选型避坑(附配置)

Kimi LeetCode 3721. 最长平衡子数组 II Rust实现

发布时间:2026/10/2 15:21:39
Kimi    LeetCode 3721. 最长平衡子数组 II Rust实现 以下是 LeetCode 3721. 最长平衡子数组 II 的 Rust 实现。---核心思路问题转化子数组中不同偶数个数 不同奇数个数 ⇔ 把每个不同的奇数记为 1每个不同的偶数记为 -1则子数组平衡 ⇔ 前缀和之差为 0。关键难点同一个数字重复出现时它只贡献一次去重但位置变了。需要用线段树维护动态变化的前缀和数组支持1. 区间加撤销旧贡献 添加新贡献2. 线段树上二分找最左等于目标值的位置算法流程- 枚举右端点 i1-indexed- 若 nums[i] 之前出现过撤销其在旧位置的贡献- 在当前位置 i 添加贡献- 用线段树查询最早出现相同前缀和的位置 pos- 更新答案 ans max(ans, i - pos)---Rust 代码rustuse std::collections::HashMap;/*** LeetCode 3721. 最长平衡子数组 II** 核心思路线段树 前缀和 哈希表** 关键转化* - 每个不同的奇数贡献 1每个不同的偶数贡献 -1* - 维护前缀和 now 不同奇数个数 - 不同偶数个数* - 子数组 [l, r] 平衡 等价于 prefix[r] - prefix[l-1] 0* - 即 prefix[r] prefix[l-1]** 难点处理数字重复出现时需要撤销之前位置的贡献* - 用线段树维护前缀和数组支持区间加* - 用线段树上二分找最左等于目标值的位置*//// 线段树节点/// 维护区间 [l, r] 的最小值 mn、最大值 mx 和懒标记 lazy#[derive(Clone, Copy)]struct Node {l: usize, // 区间左端点r: usize, // 区间右端点mn: i32, // 区间最小值前缀和mx: i32, // 区间最大值前缀和lazy: i32, // 懒标记区间加}impl Node {fn new() - Self {Node {l: 0,r: 0,mn: 0,mx: 0,lazy: 0,}}}/// 线段树/// 支持/// 1. 区间加/// 2. 线段树上二分找最小索引使得前缀和等于 targetstruct SegmentTree {tr: VecNode, // 线段树数组4倍空间}impl SegmentTree {/// 创建线段树区间为 [0, n]fn new(n: usize) - Self {let tr vec![Node::new(); (n 1) 2];let mut st SegmentTree { tr };st.build(1, 0, n);st}/// 建树初始所有前缀和为 0fn build(mut self, u: usize, l: usize, r: usize) {self.tr[u].l l;self.tr[u].r r;self.tr[u].mn 0;self.tr[u].mx 0;self.tr[u].lazy 0;if l r {return;}let mid (l r) 1;self.build(u 1, l, mid);self.build(u 1 | 1, mid 1, r);}/// 区间 [l, r] 全部加 vfn modify(mut self, u: usize, l: usize, r: usize, v: i32) {if self.tr[u].l l self.tr[u].r r {self.apply(u, v);return;}self.pushdown(u);let mid (self.tr[u].l self.tr[u].r) 1;if l mid {self.modify(u 1, l, r, v);}if r mid {self.modify(u 1 | 1, l, r, v);}self.pushup(u);}/// 线段树上二分/// 找最小索引 pos 使得前缀和 target/// 关键观察如果 target 在 [mn, mx] 范围内则该区间内一定存在这样的位置fn query(mut self, u: usize, target: i32) - usize {if self.tr[u].l self.tr[u].r {return self.tr[u].l;}self.pushdown(u);let left u 1;let right u 1 | 1;if self.tr[left].mn target target self.tr[left].mx {self.query(left, target)} else {self.query(right, target)}}/// 对节点 u 应用区间加 vfn apply(mut self, u: usize, v: i32) {self.tr[u].mn v;self.tr[u].mx v;self.tr[u].lazy v;}/// 从子节点更新父节点fn pushup(mut self, u: usize) {self.tr[u].mn self.tr[u 1].mn.min(self.tr[u 1 | 1].mn);self.tr[u].mx self.tr[u 1].mx.max(self.tr[u 1 | 1].mx);}/// 下传懒标记fn pushdown(mut self, u: usize) {if self.tr[u].lazy ! 0 {let lazy self.tr[u].lazy;self.apply(u 1, lazy);self.apply(u 1 | 1, lazy);self.tr[u].lazy 0;}}}struct Solution;impl Solution {pub fn longest_balanced(nums: Veci32) - i32 {let n nums.len();let mut st SegmentTree::new(n);// last[x] 数值 x 上次出现的位置let mut last: HashMapi32, usize HashMap::new();let mut now: i32 0; // 当前前缀和let mut ans: i32 0; // 答案// 枚举子数组右端点1-indexedfor i in 1..n {let x nums[i - 1];// x 的贡献奇数 1偶数 -1let det if (x 1) 1 { 1 } else { -1 };// 如果 x 之前出现过撤销其之前的贡献if let Some(pos) last.get(x) {st.modify(1, pos, n, -det);now - det;}// 添加当前 x 的贡献last.insert(x, i);st.modify(1, i, n, det);now det;// 找最早出现相同前缀和的位置let pos st.query(1, now);ans ans.max((i - pos) as i32);}ans}}---复杂度分析项目 复杂度每次 modify O(\log n)每次 query O(\log n)总时间 O(n \log n)空间 O(n)线段树 4n 节点 哈希表---示例验证示例 1nums [2,5,4,3]i x det 操作 now pos ans1 2 -1 modify[1,4]-1 -1 1 02 5 1 modify[2,4]1 0 0 23 4 -1 modify[3,4]-1 -1 1 24 3 1 modify[4,4]1 0 0 4最长平衡子数组 [2,5,4,3]长度 4 ✓示例 2nums [3,2,2,5,4]- i3 时 x2 重复出现撤销 i2 的贡献在 i3 重新添加- 最终 ans 5子数组 [3,2,2,5,4] ✓示例 3nums [1,2,3,2]- i4 时 x2 重复出现撤销 i2 的贡献在 i4 重新添加- 最终 ans 3子数组 [2,3,2] ✓---下载完整 Rust 文件[solution_3721.rs](sandbox:///mnt/agents/output/solution_3721.rs)

关于恒美微站

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

快速链接

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

服务项目

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

联系方式

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

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