当前位置: 首页 > news >正文

DeepSeek LeetCode 2421. 好路径的数目 Python3实现

给你 Python3 版本的代码思路和之前的 Java 实现一致完整代码pythonclass Solution:def numberOfGoodPaths(self, vals: List[int], edges: List[List[int]]) - int:n len(vals)# 1. 构建邻接表graph [[] for _ in range(n)]for u, v in edges:graph[u].append(v)graph[v].append(u)# 2. 初始化并查集parent list(range(n))size [1] * ndef find(x):# 路径压缩if parent[x] ! x:parent[x] find(parent[x])return parent[x]def union(a, b):ra, rb find(a), find(b)if ra rb:returnif size[ra] size[rb]:parent[ra] rbsize[rb] size[ra]else:parent[rb] rasize[ra] size[rb]# 3. 将节点按值从小到大排序nodes sorted(range(n), keylambda x: vals[x])ans 0active [False] * n # 标记节点是否已激活值 ≤ 当前值i 0while i n:cur_val vals[nodes[i]]# 收集所有值为 cur_val 的节点cur_nodes []while i n and vals[nodes[i]] cur_val:cur_nodes.append(nodes[i])i 1# 激活当前值的节点并合并相邻的激活节点for u in cur_nodes:for v in graph[u]:if active[v]:union(u, v)active[u] True# 统计每个连通块中当前值的节点数量cnt {}for u in cur_nodes:root find(u)cnt[root] cnt.get(root, 0) 1# 计算贡献C(cnt, 2) cntfor c in cnt.values():ans c * (c 1) // 2return ans代码说明1. 核心思想· 按节点值从小到大处理· 每处理一个值 v 时只考虑值 ≤ v 的节点和边· 相同值 v 的节点如果在同一个连通块中它们之间的所有路径都是好路径2. 关键步骤· 排序节点nodes sorted(range(n), keylambda x: vals[x])· 维护 active 数组标记已经激活值 ≤ 当前值的节点· 并查集动态合并激活的节点· 统计贡献对于当前值 v在每个连通块中统计有多少个值为 v 的节点 c贡献为 c * (c 1) // 2包括长度为 0 的路径3. 时间复杂度· O(n log n m α(n))其中 m len(edges)· 排序 O(n log n)并查集操作近似 O(1)4. 空间复杂度· O(n m) 用于存图、并查集和辅助数组示例验证python# 示例 1vals [1,3,2,1,3]edges [[0,1],[0,2],[2,3],[2,4]]print(Solution().numberOfGoodPaths(vals, edges)) # 输出: 6# 示例 2vals [1,1,2,2,3]edges [[0,1],[1,2],[2,3],[2,4]]print(Solution().numberOfGoodPaths(vals, edges)) # 输出: 7
http://www.rkmt.cn/news/1302679.html

相关文章:

  • Kubernetes自动化更新利器Keel:实现容器镜像的持续部署
  • 2026污水提升泵品牌推荐:技术实力与口碑之选 - 品牌排行榜
  • Jetson Orin上编译Apollo遇到‘drm.h找不到’?手把手教你修复Bazel编译依赖
  • Godot游戏自动化构建与发布:基于GitHub Actions与Docker的CI/CD实践
  • 嵌入式软件架构模式实战解析:从前后台到RTOS的选型指南
  • 树莓派Pico W驱动HDMI仪表盘:物联网数据可视化实战
  • 独立游戏物理抓取对战开发实战:从创意到上架全流程解析
  • 独立开发者AI编码模板:Cursor-Solo-Dev-Template全栈实践指南
  • Unity区域加载系统:异步加载与资源管理实战指南
  • 从零到联网:QNX Neutrino RTOS安装后的第一个网络配置实战(含ifconfig与DHCP详解)
  • 猫抓插件:5分钟掌握浏览器资源嗅探的终极武器
  • 3大核心能力解析:UABEA如何成为Unity资源编辑的首选工具
  • 百度网盘直链解析终极指南:如何实现高速下载的完整技术方案
  • 避坑指南:ESP32-CAM RTSP视频流那些事儿——从代码精简到稳定播放的完整流程
  • 碧蓝航线自动化终极指南:如何用Alas脚本轻松实现24/7全自动游戏管理
  • 项目——基于C/S架构的文件传输系统平台 (1)——重构
  • 3步搞定百度网盘高速下载:无需会员的终极提速指南
  • 如何用RePKG解锁Wallpaper Engine的隐藏宝藏:从资源提取到纹理转换的完整指南
  • 深度解析:如何用company-crawler实现高效企业数据采集实战指南
  • Copaw_dev:AI编程助手增强框架,提升代码生成与自动化开发效率
  • Vircadia Native Core:开源虚拟世界服务器核心架构与部署实战
  • Scarab空洞骑士模组管理器:2024年最完整的安装与使用指南
  • AI智能体分类学:从理论到工程实践的完整指南
  • QtScrcpy:免费开源的Android投屏控制终极指南,3个核心功能让你轻松上手
  • AssetStudio深度解析:从游戏资源提取到创意开发的完整指南
  • 2026年4月评价高的投影机供应商实力,山体投影机/7000流明投影机/W40投影机出租,投影机销售厂家实力 - 品牌推荐师
  • 从零构建自主AI智能体:核心架构、实战部署与高级应用场景解析
  • Seraphine:基于LCU API的英雄联盟数据查询与游戏辅助工具
  • AI驱动代码审查:Cursor与Git工作流融合实践
  • JetBrains IDE试用期重置终极指南:3种简单方法实现30天无限续杯