news 2026/6/10 10:19:06

千问 LeetCode 2493. 将节点分成尽可能多的组 Python3实现

作者头像

张小明

前端开发工程师

1.2k 24
文章封面图
千问 LeetCode 2493. 将节点分成尽可能多的组 Python3实现

这道题的核心思路是:先判断每个连通分量是否是二分图(有奇环则无解),再对每个连通分量枚举起点做BFS求最大深度,最后累加各分量的最大深度。

下面给出一个清晰、高效的 Python3 实现,包含详细注释:

from collections import deque, defaultdict

class Solution:
def magnificentSets(self, n: int, edges: List[List[int]]) -> int:
# 1. 建图(节点编号从1到n,内部转为0到n-1)
g = [[] for _ in range(n)]
for u, v in edges:
g[u-1].append(v-1)
g[v-1].append(u-1)

# 2. 并查集:找出所有连通分量
parent = list(range(n))
def find(x):
while parent[x] != x:
parent[x] = parent[parent[x]]
x = parent[x]
return x
def union(x, y):
rx, ry = find(x), find(y)
if rx != ry:
parent[ry] = rx

for u, v in edges:
union(u-1, v-1)

# 将每个节点归入其连通分量
comps = defaultdict(list)
for i in range(n):
comps[find(i)].append(i)

# 3. BFS函数:以start为根,返回该连通分量能分出的最大组数,若含奇环返回-1
def bfs_max_depth(start):
depth = {start: 1}
q = deque([start])
max_depth = 1
while q:
u = q.popleft()
for v in g[u]:
if v not in depth:
depth[v] = depth[u] + 1
max_depth = max(max_depth, depth[v])
q.append(v)
else:
# 相邻节点深度差必须为1,否则不是二分图
if abs(depth[v] - depth[u]) != 1:
return -1
return max_depth

# 4. 对每个连通分量,枚举所有节点作为起点,取最大深度
total = 0
for root, nodes in comps.items():
best = 0
for start in nodes:
d = bfs_max_depth(start)
if d == -1:
return -1
best = max(best, d)
total += best

return total

算法要点说明
步骤 说明
建图 将节点编号从1-based转为0-based,方便数组索引
并查集 快速找出所有连通分量,每个分量独立处理
二分图判定 在BFS过程中,若相邻节点深度差不为1,说明存在奇环,直接返回-1
枚举起点 每个连通分量内,以不同节点为根BFS得到的深度可能不同,取最大值
累加结果 各分量的最大深度相加即为全局最大分组数

复杂度分析

- 时间复杂度:O(n × (n + m)),其中m为边数。最坏情况下每个连通分量都接近全图,枚举所有起点做BFS。
- 空间复杂度:O(n + m),用于存储邻接表、并查集和BFS队列。

示例验证

示例1:n=6, edges=[[1,2],[1,4],[1,5],[2,6],[2,3],[4,6]]
输出:4(与题目一致)

示例2:n=3, edges=[[1,2],[2,3],[3,1]]
输出:-1(三角形奇环,无法分组)

这个实现直接利用了题目性质,代码简洁且易于理解,适合面试或竞赛场景。

版权声明: 本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若内容造成侵权/违法违规/事实不符,请联系邮箱:809451989@qq.com进行投诉反馈,一经查实,立即删除!
网站建设 2026/5/21 16:06:09

双足机器人Harpy:EDF推力增强与动态平衡控制技术解析

1. 项目概述 Harpy机器人代表了双足行走技术领域的一次重大突破。作为一名长期从事机器人系统开发的工程师,我亲眼见证了传统双足机器人在复杂地形移动时面临的种种挑战——从平衡控制到能量效率,每一步都充满技术难题。而Harpy通过创新的推力增强设计&a…

作者头像 李华
网站建设 2026/5/20 6:56:23

向量法实战:从凹多边形切割到凸多边形碰撞检测

1. 为什么需要凹多边形切割 在游戏开发或者物理引擎实现中,碰撞检测是个绕不开的话题。你可能已经听说过分离轴算法(SAT),这个算法在处理凸多边形碰撞时效率很高,但有个前提条件:它只能处理凸多边形。现实情…

作者头像 李华
网站建设 2026/5/21 14:02:25

深入解析SM3哈希算法:从原理到实现与安全应用

1. 从零开始理解SM3:一个国产密码学哈希算法的深度拆解在数字世界的安全基石中,哈希算法扮演着“数字指纹”生成器的角色。无论是你下载一个软件后校验其完整性,还是进行一笔区块链交易,背后都离不开哈希算法的默默工作。今天&…

作者头像 李华
网站建设 2026/6/8 8:15:41

告别噪音烦恼:TPFanCtrl2让你的ThinkPad风扇管理更智能

告别噪音烦恼:TPFanCtrl2让你的ThinkPad风扇管理更智能 【免费下载链接】TPFanCtrl2 ThinkPad Fan Control 2 (Dual Fan) for Windows 10 and 11 项目地址: https://gitcode.com/gh_mirrors/tp/TPFanCtrl2 还在为ThinkPad风扇突然狂转打断工作思路而烦恼吗&a…

作者头像 李华