尧图网络 高端网站定制 · 原创设计
免费咨询热线
400-888-6620
免费获取方案
Kimi    LeetCode 3534. 针对图的路径存在性查询 II Python3实现
以下是 LeetCode 3534. 针对图的路径存在性查询 II 的完整 Python3 实现。---核心思路1. 排序将节点按 nums 值排序。排序后同一连通分量内的节点必然连续。2. 双指针求最远跳对每个位置 i求出一步能到达的最远位置 nxt[i]。3. 倍增预处理jump[i][k] 表示从 i 连续做 2^k 次最远跳到达的位置。4. 查询先判断是否在同一连通分量再用倍增贪心求最少步数。时间复杂度O(n log n q log n)空间复杂度O(n log n)。---Python3 代码pythonfrom typing import Listclass Solution:def pathExistenceQueries(self, n: int, nums: List[int], maxDiff: int, queries: List[List[int]]) - List[int]:# 1. 按 nums 值排序记录原始下标 - 排序后位置的映射order sorted(range(n), keylambda x: nums[x])sorted_nums [nums[i] for i in order]pos [0] * n # pos[originalIndex] sortedPositionfor i, idx in enumerate(order):pos[idx] i# 2. 计算连通分量编号排序后连续段comp [0] * nfor i in range(1, n):comp[i] comp[i - 1]if sorted_nums[i] - sorted_nums[i - 1] maxDiff:comp[i] 1# 3. 双指针求 nxt[i]从排序后位置 i 一步能跳到的最远位置nxt [0] * nr 0for i in range(n):while r 1 n and sorted_nums[r 1] - sorted_nums[i] maxDiff:r 1nxt[i] r# 4. 倍增数组jump[i][k] 表示从 i 连续跳 2^k 次最远跳到达的位置LOG (n 1).bit_length()jump [[0] * LOG for _ in range(n)]for i in range(n):jump[i][0] nxt[i]for k in range(1, LOG):for i in range(n):jump[i][k] jump[jump[i][k - 1]][k - 1]# 5. 回答查询ans []for u, v in queries:if u v:ans.append(0)continuepu, pv pos[u], pos[v]if pu pv:pu, pv pv, pu# 不在同一连通分量不可达if comp[pu] ! comp[pv]:ans.append(-1)continue# 倍增贪心从高位到低位能跳就跳求最少步数cur pusteps 0for k in range(LOG - 1, -1, -1):if jump[cur][k] pv:steps 1 kcur jump[cur][k]# 最后一步一定能到达 pvans.append(steps 1)return ans---关键点说明步骤 说明排序映射 pos[u] 将原始节点编号映射到排序后的位置后续操作都在排序后的数组上进行。连通分量 排序后若相邻元素差 maxDiff则开启新连通分量。查询时先判断 comp[pu] comp[pv]。最远跳 nxt 由于数组已排序双指针可在 O(n) 内求出每个位置一步能覆盖的最远范围。nxt[i] 单调不降。倍增 jump 类似树上倍增但这里是区间最远跳的倍增。jump[i][k] 表示从 i 出发连续做 2^k 次贪心最远跳到达的位置。查询贪心 从 pu 到 pv从高位到低位尝试如果跳 2^k 步后仍到不了 pv就先跳这 2^k 步。最终剩余距离只需一步即可覆盖。
RELATED

相关推荐

5分钟掌握RPG Maker游戏资源解密:免费开源工具全攻略

5分钟掌握RPG Maker游戏资源解密:免费开源工具全攻略

5分钟掌握RPG Maker游戏资源解密:免费开源工具全攻略 【免费下载链接】RPGMakerDecrypter Tool for decrypting and extracting RPG Maker XP, VX and VX Ace encrypted archives and MV and MZ encrypted files. 项目地址: https://gitcode.com/gh_mirrors/rp/RP…

📅 2026/10/22 7:32:04
ROS2 话题与服务通信超详解(C++实战+底层原理+所有疑难问题根治)

ROS2 话题与服务通信超详解(C++实战+底层原理+所有疑难问题根治)

前言 很多ROS2新手在学习话题、服务通信时,都会卡在一堆底层疑问: ROS2发布消息到底发到哪里?没有Master怎么通信? 订阅队列queue_size=10是什么作用?生产速度大于消费速度会怎样? 服务回调为什么必须用std::bind?_1、_2占位符到底是什么? 服务的Request、Response是谁…

📅 2026/10/28 11:45:41
OpenAI Codex代码生成模型:从环境配置到实战应用完整指南

OpenAI Codex代码生成模型:从环境配置到实战应用完整指南

这次我们来看一个关于Codex的完整使用教程。Codex作为OpenAI推出的代码生成模型,能够根据自然语言描述生成对应的代码,对于开发者来说是个很实用的工具。不过很多人在安装配置和实际使用中会遇到各种问题,今天就来详细讲解从环境准备到功能实…

📅 2026/10/19 7:18:35
MORE NEWS

更多资讯

📰

SAP ECC企业级ERP系统核心解析:架构、模块与实操

1. 项目概述:ECC不是“加密货币”,而是企业级ERP系统的代名词如果你最近在招聘网站上刷到“SAP ECC开发工程师”“ECC运维岗急招”“ECC ABAP顾问年薪30W”,或者在技术论坛里看到“ECC升级S/4HANA踩坑实录”“ECC LSMW批量导入失败排查”&…

📰

MATLAB信号与系统实验报告写作与验收全流程

简介:面向广东工业大学信息工程学院电子信息类学生的《信号与系统》实验报告文档,也可供学习信号处理与MATLAB仿真的读者参考。内容围绕连续时间信号在MATLAB中的表示、卷积运算、连续与离散LTI系统时域分析,以及傅里叶级数、傅里叶变换、拉普…

📰

Linux proc文件系统实验:从进程观测到系统分析

1. 从一次“看不到进程”的困惑说起如果你在操作系统实验课上做到第八个实验,看到标题写着“proc文件系统”,心里大概率会冒出两个念头:一是这玩意儿跟前面做的进程调度、内存管理有什么关系,二是“文件系统”四个字听起来就像要写…

📰

深入解析proc文件系统实验:从内核模块到动态文件读写

操作系统实验里,文件系统相关的实验往往是最容易让人“看起来懂了、动手就懵”的一类。这次要聊的是实验八的 proc 文件系统,一个在课程里常被一笔带过、但在真实系统里天天被各种工具悄悄读取的虚拟文件系统。它不像磁盘上的 ext4 那样存真实数据&#…

📰

impeccable用法解析:从英语近义词辨析到职场内容创作的无懈可击标准

1. 从“完美”到“无可挑剔”:先搞清楚 impeccable 到底在说什么我第一次认真琢磨 impeccable 这个词,是在帮一位朋友改英文简历的时候。她写自己“attention to detail”,我建议换成“impeccable attention to detail”,她盯着屏…

📰

Claude Code工具系统架构与注册表模式实战

1. Claude Code工具系统架构解析注册表模式(Registry Pattern)在Claude Code工具系统中扮演着核心枢纽的角色。这种设计模式本质上是一个中央化的工具管理系统,通过统一的接口来注册、管理和调用各种功能模块。在实际工程实践中,我们采用了两级注册机制&…

TODAY

今日更新

THIS WEEK

本周精选

THIS MONTH

本月热门

读完文章,想聊聊您的网站?

告诉我们您的行业与需求,资深顾问一对一梳理方案与报价,全程免费。

📞 💬