发布时间:2026/7/11 13:48:48
Kimi    LeetCode 3534. 针对图的路径存在性查询 II Rust实现 以下是 LeetCode 3534. 针对图的路径存在性查询 II 的完整 Rust 实现。---核心思路与 Java/Python 版本一致1. 排序按 nums 值排序记录原始下标到排序后位置的映射。2. 双指针求最远跳nxt[i] 表示从排序后位置 i 一步能到达的最远位置。3. 倍增预处理jump[i][k] 表示从 i 连续做 2^k 次最远跳到达的位置。4. 查询贪心同一连通分量内从高位到低位尝试跳跃求最少步数。时间复杂度O(n log n q log n)空间复杂度O(n log n)。---Rust 代码rustuse std::collections::HashMap;impl Solution {pub fn path_existence_queries(n: i32, nums: Veci32, max_diff: i32, queries: VecVeci32) - Veci32 {let n n as usize;let max_diff max_diff as i64;// 1. 按 nums 值排序记录原始下标 - 排序后位置的映射let mut order: Vecusize (0..n).collect();order.sort_by_key(|i| nums[i]);let mut sorted_nums vec![0i64; n];let mut pos vec![0usize; n];for (i, idx) in order.iter().enumerate() {sorted_nums[i] nums[idx] as i64;pos[idx] i;}// 2. 计算连通分量编号排序后连续段let mut comp vec![0usize; n];for i in 1..n {comp[i] comp[i - 1];if sorted_nums[i] - sorted_nums[i - 1] max_diff {comp[i] 1;}}// 3. 双指针求 nxt[i]从排序后位置 i 一步能跳到的最远位置let mut nxt vec![0usize; n];let mut r 0usize;for i in 0..n {while r 1 n sorted_nums[r 1] - sorted_nums[i] max_diff {r 1;}nxt[i] r;}// 4. 倍增数组jump[i][k] 表示从 i 连续跳 2^k 次最远跳到达的位置let log (n 1).next_power_of_two().trailing_zeros() as usize;let mut jump vec![vec![0usize; log]; n];for i in 0..n {jump[i][0] nxt[i];}for k in 1..log {for i in 0..n {jump[i][k] jump[jump[i][k - 1]][k - 1];}}// 5. 回答查询let mut ans Vec::with_capacity(queries.len());for q in queries {let u q[0] as usize;let v q[1] as usize;if u v {ans.push(0);continue;}let mut pu pos[u];let mut pv pos[v];if pu pv {std::mem::swap(mut pu, mut pv);}// 不在同一连通分量不可达if comp[pu] ! comp[pv] {ans.push(-1);continue;}// 倍增贪心从高位到低位能跳就跳求最少步数let mut cur pu;let mut steps 0i32;for k in (0..log).rev() {if jump[cur][k] pv {steps (1 k) as i32;cur jump[cur][k];}}// 最后一步一定能到达 pvans.push(steps 1);}ans}}---关键点说明步骤 说明排序映射 pos[u] 将原始节点编号映射到排序后的位置。Rust 中需小心 usize 与 i32 的类型转换。连通分量 排序后若相邻元素差 max_diff则开启新连通分量。查询时先判断 comp[pu] comp[pv]。最远跳 nxt 双指针在 O(n) 内求出每个位置一步能覆盖的最远范围。nxt[i] 单调不降。倍增 jump jump[i][k] 表示从 i 出发连续做 2^k 次贪心最远跳到达的位置。利用 next_power_of_two().trailing_zeros() 计算所需层数。查询贪心 从 pu 到 pv从高位到低位尝试如果跳 2^k 步后仍到不了 pv就先跳这 2^k 步。最终剩余距离只需一步即可覆盖。 注意Rust 中 nums 值差可能溢出 i32因此内部计算时转换为 i64 处理。

相关新闻

2026/7/11 13:48:48

网盘直链下载助手:九大网盘高速下载的完整技术解决方案

网盘直链下载助手:九大网盘高速下载的完整技术解决方案 【免费下载链接】Online-disk-direct-link-download-assistant 一个基于 JavaScript 的网盘文件下载地址获取工具。基于【网盘直链下载助手】修改 ,支持 百度网盘 / 阿里云盘 / 中国移动云盘 / 天翼…

2026/7/11 17:23:57

服装生产管理进阶 | 设计师品牌如何应对小批量打样成本挑战

在2026年的市场环境下,国内独立服装设计师品牌规模已达到约1.2万家。对于这些品牌而言,小批量打样是维持产品迭代的核心环节。然而,由于SKU更新快、单款需求量小(通常为5-20件),打样成本过高已成为制约行业…

2026/7/11 17:23:57

直流负载管理优化:G6D-ASI继电器与PIC18F4585方案解析

1. 直流负载管理的挑战与优化思路 在工业控制和电力电子领域,直流负载管理一直是个既基础又关键的课题。我最近在一个自动化产线改造项目中,就遇到了典型的直流负载控制难题——原有系统使用普通继电器控制24V直流电磁阀群,不仅响应速度慢&am…

2026/7/11 17:23:57

编程器固件 MAC 地址修复:3 种方法解决刷机后地址冲突与丢失

编程器固件 MAC 地址修复:3 种方法解决刷机后地址冲突与丢失当技术人员进行路由器硬改、救砖或批量刷机时,经常会遇到一个棘手的问题:刷写编程器固件后,设备的 MAC 地址出现重复或丢失。这不仅会导致网络冲突,还可能影…

2026/7/11 17:18:57

I2L-MeshNet模型压缩与加速:轻量化部署的实用技巧

I2L-MeshNet模型压缩与加速:轻量化部署的实用技巧 【免费下载链接】I2L-MeshNet_RELEASE Official PyTorch implementation of "I2L-MeshNet: Image-to-Lixel Prediction Network for Accurate 3D Human Pose and Mesh Estimation from a Single RGB Image&quo…

2026/7/11 5:30:49

国内大模型选型与企业级落地实战指南

我不能提供任何关于访问境外网络信息的技术方案或变通方法。根据中国法律法规和网络管理要求,所有互联网服务必须遵守国家关于网络安全、数据安全和内容安全的规定。ChatGPT及其后续版本(如所谓“GPT-5”)是由境外机构研发的大语言模型&#…

2026/7/11 2:43:05

三步实战方案:高效获取智慧教育平台电子课本PDF的完整流程

三步实战方案:高效获取智慧教育平台电子课本PDF的完整流程 【免费下载链接】tchMaterial-parser 国家中小学智慧教育平台 电子课本下载工具,帮助您从智慧教育平台中获取电子课本的 PDF 文件网址并进行下载,让您更方便地获取课本内容。 项目…

2026/7/11 8:37:53

3个高效策略:快速掌握Axure中文界面配置

3个高效策略:快速掌握Axure中文界面配置 【免费下载链接】axure-cn Chinese language file for Axure RP. Axure RP 简体中文语言包。支持 Axure 11、10、9。不定期更新。 项目地址: https://gitcode.com/gh_mirrors/ax/axure-cn 还在为Axure RP的英文界面感…