0

0

冗余连接

霞舞

霞舞

发布时间:2025-01-30 08:26:35

|

443人浏览过

|

来源于dev.to

转载

684。冗余连接

难度:中等

>>主题:深度优先搜索,广度优先搜索,联合查找,图形

在这个问题中,一棵树是连接且没有循环的无向图>您获得了一个图形,该图是从1到n标记的n个节点开始的树,并增加了一个边缘。添加的边缘具有从1到n选择的两个不同的

的顶点,并且不是已经存在的边缘。该图表示为长度为n的数组边缘,其中边缘[i] = [ai ,bi]表明节点ai 返回可以删除的边缘,以便结果图是n节点的树。如果有多个答案,请返回在输入

>

>示例1:

>输入: edges = [[1,2],[1,3],[2,3]]

>输出:reduntant1-1-graph [2,3]

  • >>示例2:
>输入:

edges = [[1,2],[2,3],[3,4],[1,4],[1,5]] >输出:

[1,4]

reduntant1-2-graph

    >约束:
  • >
  • n == edge.length
  • 3
  • edges [i] .length == 2

1 i i

Brancher AI
Brancher AI

无代码连接AI模型,快速创建AI应用程序

下载
    i
  • a
  • i
  • != b
  • i
  • > 没有重复的边缘。给定的图是连接的。
  • 解决方案:
  • 冗余连接
  • 问题要求我们确定图形中的边缘,可以将图形转换为有效的树。树是连接和无环的无向图。给我们一个图形,该图是从树开始的,但通过添加一个额外的边缘进行了修改。我们的目标是找到并返回这个额外的优势。
  • >
  • 关键点

该图是未取向

删除冗余边缘后所得的图形必须没有周期。 答案应返回输入中出现的

最后一个

的边缘,如果有多个有效的解决方案。

由于单个额外的边缘,该图最多可以具有一个周期。
  1. 方法 该方法涉及使用>深度优先搜索(dfs)来检测周期:
  2. >邻接列表表示
  3. >使用邻接列表来表示图形。该结构适合有效地执行df。

通过dfs

循环检测:> 在将边缘添加到图表之前,请使用dfs检查边缘两个顶点之间是否已经有一个路径。如果有的话,添加此边缘将形成一个周期。

  1. 返回边缘

    • 如果检测到一个周期,请返回当前边缘作为冗余连接。
  2. 计划

    解析输入边缘。

      维护一个邻接列表以动态跟踪图形的连接。
    • 对于每个边缘:
    使用递归dfs函数检查两个顶点之间的路径是否存在。
  3. 如果存在路径,请返回边缘作为冗余连接。

    否则,将边缘添加到邻接列表中。

    如果找不到冗余边缘,则返回空结果(尽管这不会按照问题的限制发生)。
    • >让我们在php中实现此解决方案: 684。冗余连接
<?php
/**
 * @param Integer[][] $edges
 * @return Integer[]
 */
function findRedundantConnection($edges) {
    ...
    ...
    ...
    /**
     * go to ./solution.php
     */
}

/**
 * Helper function to perform DFS and check connectivity
 *
 * @param $src
 * @param $target
 * @param $visited
 * @param $adjList
 * @return bool
 */
private function isConnected($src, $target, &$visited, &$adjList) {
    ...
    ...
    ...
    /**
     * go to ./solution.php
     */
}

// Example usage:
$edges1 = [[1,2],[1,3],[2,3]];
$edges2 = [[1,2],[2,3],[3,4],[1,4],[1,5]];

print_r(findRedundantConnection($edges1)) . "\n"; // Output: [2,3]
print_r(findRedundantConnection($edges2)) . "\n"; // Output: [1,4]
?>

解释:

  1. dfs实现
    • 从一个节点开始,然后递归访问其邻居。
    • 使用访问的数组避免重新访问节点。
    • 如果在遍历期间达到目标节点,则存在一条路径。
  2. edge addad

如果在边缘的顶点之间不存在路径,请将边缘添加到邻接列表中,然后继续进行下一个边缘。

冗余边缘

  1. 如果已经存在路径,请在形成周期时返回当前边缘。

      示例演练
    • 示例1:
    • >输入
    • :edges = [[1,2],[1,3],[2,3]]
  2. 步骤
  3. >将邻接列表初始化为[]。

      处理边缘:
    • 添加[1,2]→图:{1:[2],2:[1]}
  4. 添加[1,3]→图:{1:[2,3],2:[1],3:[1]}
  5. 检查[2,3]:dfs找到路径→返回[2,3]。

    • >输出
    • :[2,3]
    示例2:

> input

:edges = [[1,2],[2,3],[3,4],[1,4],[1,5]] 步骤

>将邻接列表初始化为[]。

处理边缘:

添加[1,2]→图:{1:[2],2:[1]}
  1. 添加[2,3]→图:{1:[2],2:[1,3],3:[2]}
  2. 添加[3,4]→图:{1:[2],2:[1,3],3:[2,4],4:[3]}
    • 检查[1,4]:dfs找到路径→返回[1,4]。
    • 输出
    :[1,4] 时间复杂性

dfs traversal

对于每个边缘,我们执行一个dfs来检查连接。> 最差的情况:

o(v e)

,其中

v
  1. 是顶点的数量,
    • e
    • 是边的数量。
    总复杂度

由于我们为每个边缘执行dfs,因此总体复杂性为

o(e×(v e))

  1. 空间复杂度

    • >邻接列表:
    • o(v e) 访问阵列:o(v) 总计:
    • o(v e)
  2. 输出示例
    • 示例1: > input :[[1,2],[1,3],[2,3]]
    • >
    >
  3. >输出
  4. :[2,3]

    示例2:

      > input
    • :[[[1,2],[2,3],[3,4],[1,4],[1,5]] >输出:[1,4] 可以使用基于dfs的方法来有效解决该问题以检测周期。此方法动态构建图形并在每个步骤中检查冗余边缘。该解决方案通过遵守问题约束并输出形成周期并发生在输入中的边缘的边缘来确保正确性。>
    • 联系链接 如果您发现此系列有帮助,请考虑在github上给出 reposority cository >在您喜欢的社交网络上分享帖子。您的支持对我来说意义重大!
    • >
    • 如果您想要这样的更多有用的内容,请随时关注我:> linkedin
github

热门AI工具

更多
DeepSeek
DeepSeek

幻方量化公司旗下的开源大模型平台

豆包大模型
豆包大模型

字节跳动自主研发的一系列大型语言模型

通义千问
通义千问

阿里巴巴推出的全能AI助手

腾讯元宝
腾讯元宝

腾讯混元平台推出的AI助手

文心一言
文心一言

文心一言是百度开发的AI聊天机器人,通过对话可以生成各种形式的内容。

讯飞写作
讯飞写作

基于讯飞星火大模型的AI写作工具,可以快速生成新闻稿件、品宣文案、工作总结、心得体会等各种文文稿

即梦AI
即梦AI

一站式AI创作平台,免费AI图片和视频生成。

ChatGPT
ChatGPT

最最强大的AI聊天机器人程序,ChatGPT不单是聊天机器人,还能进行撰写邮件、视频脚本、文案、翻译、代码等任务。

相关专题

更多
edge是什么浏览器
edge是什么浏览器

Edge是一款由Microsoft开发的网页浏览器,是Windows 10操作系统中默认的浏览器,其目标是提供更快、更安全、更现代化的浏览器体验。本专题为大家提供edge浏览器相关的文章、下载、课程内容,供大家免费下载体验。

1727

2023.08.21

IE浏览器自动跳转EDGE如何恢复
IE浏览器自动跳转EDGE如何恢复

ie浏览器自动跳转edge的解决办法:1、更改默认浏览器设置;2、阻止edge浏览器的自动跳转;3、更改超链接的默认打开方式;4、禁用“快速网页查看器”;5、卸载edge浏览器;6、检查第三方插件或应用程序等等。本专题为大家提供相关的文章、下载、课程内容,供大家免费下载体验。

397

2024.03.05

如何解决Edge打开但没有标题的问题
如何解决Edge打开但没有标题的问题

若 Microsoft Edge 浏览器打开后无标题(窗口空白或标题栏缺失),可尝试以下方法解决: 重启 Edge:关闭所有窗口,重新启动浏览器。 重置窗口布局:右击任务栏 Edge 图标 → 选择「最大化」或「还原」。 禁用扩展:进入 edge://extensions 临时关闭插件测试。 重置浏览器设置:前往 edge://settings/reset 恢复默认配置。 更新或重装 Edge:检查最新版本,或通过控制面板修复

1038

2025.04.24

length函数用法
length函数用法

length函数用于返回指定字符串的字符数或字节数。可以用于计算字符串的长度,以便在查询和处理字符串数据时进行操作和判断。 需要注意的是length函数计算的是字符串的字符数,而不是字节数。对于多字节字符集,一个字符可能由多个字节组成。因此,length函数在计算字符串长度时会将多字节字符作为一个字符来计算。更多关于length函数的用法,大家可以阅读本专题下面的文章。

954

2023.09.19

点击input框没有光标怎么办
点击input框没有光标怎么办

点击input框没有光标的解决办法:1、确认输入框焦点;2、清除浏览器缓存;3、更新浏览器;4、使用JavaScript;5、检查硬件设备;6、检查输入框属性;7、调试JavaScript代码;8、检查页面其他元素;9、考虑浏览器兼容性。本专题为大家提供相关的文章、下载、课程内容,供大家免费下载体验。

197

2023.11.24

github中文官网入口 github中文版官网网页进入
github中文官网入口 github中文版官网网页进入

github中文官网入口https://docs.github.com/zh/get-started,GitHub 是一种基于云的平台,可在其中存储、共享并与他人一起编写代码。 通过将代码存储在GitHub 上的“存储库”中,你可以: “展示或共享”你的工作。 持续“跟踪和管理”对代码的更改。

4129

2026.01.21

Go高并发任务调度与Goroutine池化实践
Go高并发任务调度与Goroutine池化实践

本专题围绕 Go 语言在高并发任务处理场景中的实践展开,系统讲解 Goroutine 调度模型、Channel 通信机制以及并发控制策略。内容包括任务队列设计、Goroutine 池化管理、资源限制控制以及并发任务的性能优化方法。通过实际案例演示,帮助开发者构建稳定高效的 Go 并发任务处理系统,提高系统在高负载环境下的处理能力与稳定性。

22

2026.03.10

Kotlin Android模块化架构与组件化开发实践
Kotlin Android模块化架构与组件化开发实践

本专题围绕 Kotlin 在 Android 应用开发中的架构实践展开,重点讲解模块化设计与组件化开发的实现思路。内容包括项目模块拆分策略、公共组件封装、依赖管理优化、路由通信机制以及大型项目的工程化管理方法。通过真实项目案例分析,帮助开发者构建结构清晰、易扩展且维护成本低的 Android 应用架构体系,提升团队协作效率与项目迭代速度。

48

2026.03.09

JavaScript浏览器渲染机制与前端性能优化实践
JavaScript浏览器渲染机制与前端性能优化实践

本专题围绕 JavaScript 在浏览器中的执行与渲染机制展开,系统讲解 DOM 构建、CSSOM 解析、重排与重绘原理,以及关键渲染路径优化方法。内容涵盖事件循环机制、异步任务调度、资源加载优化、代码拆分与懒加载等性能优化策略。通过真实前端项目案例,帮助开发者理解浏览器底层工作原理,并掌握提升网页加载速度与交互体验的实用技巧。

93

2026.03.06

热门下载

更多
网站特效
/
网站源码
/
网站素材
/
前端模板

精品课程

更多
相关推荐
/
热门推荐
/
最新课程
Git 教程
Git 教程

共21课时 | 4.2万人学习

Git版本控制工具
Git版本控制工具

共8课时 | 1.6万人学习

Git中文开发手册
Git中文开发手册

共0课时 | 94人学习

关于我们 免责申明 举报中心 意见反馈 讲师合作 广告合作 最新更新
php中文网:公益在线php培训,帮助PHP学习者快速成长!
关注服务号 技术交流群
PHP中文网订阅号
每天精选资源文章推送

Copyright 2014-2026 https://www.php.cn/ All Rights Reserved | php.cn | 湘ICP备2023035733号