news 2026/5/7 4:03:39

千问 LeetCode 2127.参加会议的最多员工数 Python3实现

作者头像

张小明

前端开发工程师

1.2k 24
文章封面图
千问 LeetCode 2127.参加会议的最多员工数 Python3实现

这道题考察的是基环树(Pseudotree)的性质以及拓扑排序的应用。

🧠 核心思路

1. 图的结构:每个员工是一个节点,favorite[i] 是一条从 i 指向 favorite[i] 的有向边。因为每个点出度为 1,整个图由若干个“基环树”组成(即一个环,环上挂着若干树枝)。
2. 两种情况:
* 情况一(大环):如果环的长度大于 2,那么只有环上的节点能坐在一起。树枝上的节点无法插入(因为会破坏环上节点的相邻关系)。
* 情况二(双向配对):如果环的长度等于 2(即 A 喜欢 B,B 喜欢 A),那么 A 和 B 可以坐在一起。此时,挂在 A 和 B 身上的“树枝”可以延伸出来,形成 链 -> A B 2 的最大环长度。
* 遍历所有长度为 2 的环,累加 最长链A + 最长链B + 2。
* 返回最大值。

💻 Python3 代码实现

from collections import deque
from typing import List

class Solution:
def maximumInvitations(self, favorite: List[int]) -> int:
n = len(favorite)

# 1. 计算入度
indegree = [0] * n
for i in range(n):
indegree[favorite[i]] += 1

# 2. 拓扑排序(剪枝)
# 将所有入度为 0 的节点(树枝末端)加入队列
queue = deque()
for i in range(n):
if indegree[i] == 0:
queue.append(i)

# max_depth[i] 表示以 i 为终点的最长链长度(包含 i)
max_depth = [1] * n

while queue:
u = queue.popleft()
v = favorite[u] # u 指向 v

# 更新 v 的最长链长度:v 的深度 = max(v 当前深度, u 的深度 + 1)
max_depth[v] = max(max_depth[v], max_depth[u] + 1)

# 减少 v 的入度,如果 v 的入度变为 0,说明 v 也是树枝的一部分
indegree[v] -= 1
if indegree[v] == 0:
queue.append(v)

# 3. 处理环
max_cycle_size = 0 # 记录长度 > 2 的最大环
sum_pair_size = 0 # 记录所有长度为 2 的环及其链的总和

for i in range(n):
# 如果 indegree[i] == 0,说明 i 是树枝上的点,已经被处理过了
if indegree[i] == 0:
continue

# 找到一个环,计算环的大小
cycle_size = 0
cur = i
while indegree[cur] != 0: # 只要还在环里
indegree[cur] = 0 # 标记为已访问(置为0,避免重复计算)
cur = favorite[cur]
cycle_size += 1

if cycle_size == 2:
# 情况二:长度为 2 的环
# i 和 favorite[i] 互相喜欢
# 加上各自延伸出的最长链
sum_pair_size += max_depth[i] + max_depth[favorite[i]]
else:
# 情况一:长度 > 2 的环
max_cycle_size = max(max_cycle_size, cycle_size)

return max(max_cycle_size, sum_pair_size)

📝 关键点解析

1. 拓扑排序的作用:
* 它帮助我们剥离了所有的“树枝”,只留下环。
* 在剥离过程中,我们利用动态规划的思想(max_depth[v] = max(max_depth[v], max_depth[u] + 1))计算出了每个环节点能延伸出的最长链长度。
2. 处理长度为 2 的环:
* 当 cycle_size == 2 时,这两个节点 u 和 v 互相喜欢。
* max_depth[u] 已经包含了 u 自己以及它身后最长链的长度。
* max_depth[v] 同理。
* 所以总长度就是 max_depth[u] + max_depth[v]。
3. 处理长度 > 2 的环:
* 这种环是封闭的,不能外挂任何节点,所以直接取最大的环长度即可。

📊 复杂度分析

* 时间复杂度:O(n)。拓扑排序遍历所有节点和边一次,找环的过程每个节点也只访问一次。
* 空间复杂度:O(n)。用于存储入度数组、队列和深度数组。

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

PageIndex:基于RAG的网页智能知识库构建实战指南

1. 项目概述:从“网页索引”到“智能知识库”的进化最近在折腾一个很有意思的项目,叫 PageIndex。乍一看名字,你可能会觉得这又是一个简单的网页爬虫或者内容抓取工具。但如果你深入了解一下,就会发现它的野心远不止于此。本质上&…

作者头像 李华
网站建设 2026/5/7 4:01:28

用立创EDA复刻蓝桥杯省赛真题电路:手把手搭建一个简易电压采集与显示系统(2022模拟题2)

用立创EDA复刻蓝桥杯省赛真题电路:手把手搭建一个简易电压采集与显示系统 在电子设计竞赛的备赛过程中,真题复现是最有效的实战训练方式之一。2022年蓝桥杯省赛模拟题中的电压采集与显示系统,融合了模拟信号处理、数字显示和存储等典型电路模…

作者头像 李华
网站建设 2026/5/7 3:57:57

扩散模型视频生成中的精细化运动控制技术解析

1. 项目概述:当视频生成遇上运动控制去年参与一个影视特效项目时,甲方要求生成一段"火山喷发时熔岩在雪地上流动"的镜头。用传统扩散模型生成的视频中,熔岩要么像水一样四处漫溢,要么像糖浆般粘稠凝固,始终无…

作者头像 李华
网站建设 2026/5/7 3:57:55

DANMP架构:基于近内存处理的Transformer加速方案

1. 项目概述:DANMP架构的核心创新在计算机视觉领域,Transformer架构正逐步取代传统CNN成为主流,其中可变形注意力机制(Deformable Attention)因其动态采样特性备受关注。然而,多尺度可变形注意力(MSDAttn)的不规则内存访问模式给传…

作者头像 李华
网站建设 2026/5/7 3:55:43

PE-bear:免费PE文件分析神器,让Windows逆向工程变得简单快速

PE-bear:免费PE文件分析神器,让Windows逆向工程变得简单快速 【免费下载链接】pe-bear Portable Executable reversing tool with a friendly GUI 项目地址: https://gitcode.com/gh_mirrors/pe/pe-bear 想象一下,你面对一个可疑的Wi…

作者头像 李华
网站建设 2026/5/7 3:55:40

边缘AI的去中心化协作学习技术解析

1. 边缘AI的范式革命:从中心化到去中心化协作学习在智慧城市的路口监控摄像头阵列中,每个摄像头都在独立分析车流数据;在农田里的土壤传感器网络中,每个节点都在持续监测墒情变化;在医院的穿戴式设备群组里&#xff0c…

作者头像 李华