【LeetCode每日一题】310. 最小高度树

news2024/11/18 9:46:43

文章目录

    • [310. 最小高度树](https://leetcode.cn/problems/minimum-height-trees/)
          • 思路:拓扑排序
          • 代码:


310. 最小高度树

在这里插入图片描述
在这里插入图片描述

思路:拓扑排序
  1. 首先判断节点数量n,如果只有一个节点,则直接返回该节点作为最小高度树的根节点。
  2. 构建邻接表g和度数数组degree:
    • 使用邻接表g存储每个节点的相邻节点。
    • 使用度数数组degree存储每个节点的度数(即相邻节点的数量)。
  3. 遍历边数组edges,构建邻接表g和更新度数数组degree:
    • 对于每条边[e[0], e[1]],将节点e[0]与节点e[1]互相添加到各自的邻接表中,同时更新它们的度数。
  4. 初始化队列q,并将所有叶子节点(度数为1的节点)加入队列:
    • 遍历所有节点,将度数为1的节点加入队列q。
  5. 使用BFS遍历叶子节点层级,不断更新度数并将新的叶子节点加入队列:
    • 从队列中取出当前层级的叶子节点,更新其相邻节点的度数。
    • 若相邻节点的度数更新为1,则将其加入队列q。
  6. 最终队列中剩下的节点即为最小高度树的根节点列表,将其返回作为结果。
代码:
class Solution {
    public List<Integer> findMinHeightTrees(int n, int[][] edges) {
        // 如果只有一个节点,直接返回该节点
        if (n == 1) {
            return List.of(0);
        }

        // 构建邻接表
        List<Integer>[] g = new List[n];
        Arrays.setAll(g, k -> new ArrayList<>());
        int[] degree = new int[n]; // 存储每个节点的度数
        for (int[] e : edges) {
            int a = e[0], b = e[1];
            g[a].add(b);
            g[b].add(a);
            ++degree[a];
            ++degree[b];
        }

        Deque<Integer> q = new ArrayDeque<>();
        // 将所有叶子节点(度数为1)加入队列
        for (int i = 0; i < n; ++i) {
            if (degree[i] == 1) {
                q.offer(i);
            }
        }

        List<Integer> ans = new ArrayList<>();
        while (!q.isEmpty()) {
            ans.clear(); // 清空结果列表
            // 遍历当前层的节点
            for (int i = q.size(); i > 0; --i) {
                int a = q.poll();
                ans.add(a); // 将当前节点加入结果列表
                // 更新与当前节点相邻的节点的度数
                for (int b : g[a]) {
                    if (--degree[b] == 1) {
                        q.offer(b); // 若更新后度数为1,则加入队列
                    }
                }
            }
        }
        return ans; // 返回最终结果列表
    }
}

点击移步博客主页,欢迎光临~

偷cyk的图

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/1525936.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

【学习心得】Python数据分析的基本思路

一、什么是数据分析&#xff1f; 数据分析是指通过一些方法&#xff0c;对一些数据进行分析&#xff0c;从中提取出有价值的信息并形成结论进行展示。 &#xff08;1&#xff09;一些方法 数学和统计学方法&#xff1a;例如回归分析、聚类分析、主成分分析、时间序列分析等&a…

软件测试面试之支付系统测试

本篇文章主要从支付系统设计入手进行测试&#xff0c;针对界面功能测试容易忽略但是又十分重要的逻辑。关于支付密码、验证码、银行卡绑定等等能从界面入手测试的&#xff0c;下文也不讲述&#xff0c;如果有兴趣可以留言&#xff0c;后面整理。 1、APP支付结果查询是否合理 假…

广州地铁线路规划

使用python实现后端功能&#xff0c;由于地铁图需要进行展示&#xff0c;svg图需要花费比较多的时间&#xff0c;这里使用了 MetroFlow 库构建的地铁地图编辑器&#xff0c;可以在画布上构建矢量图&#xff0c;实现站点路线的创建。 用法&#xff1a; 打包好后完整目录&#x…

物联网数据驾驶舱

在信息化时代&#xff0c;数据已经成为驱动企业发展的核心动力。特别是在物联网领域&#xff0c;海量数据的实时采集、分析和监控&#xff0c;对于企业的运营决策和业务优化具有至关重要的作用。HiWoo Cloud作为领先的物联网云平台&#xff0c;其数据监控功能以“物联网数据驾驶…

2024年,AI赚钱的十大版块优势解析与适合人群

随着科技的飞速发展,AI技术正逐渐渗透到我们生活的方方面面。2024年,将是AI赚钱的黄金时期。那么,如何利用AI技术实现财富增长呢?本文将为您详细解析十大赚钱版块的优势及适合从事的人群,并通过一个实际案例,带您领略AI赚钱的无限魅力。 一、运用AI写作工具提供写作服务…

每日五道java面试题之mybatis篇(四)

目录&#xff1a; 第一题. 映射器#{}和${}的区别第二题. 模糊查询like语句该怎么写?第三题. 在mapper中如何传递多个参数?第四题. Mybatis如何执行批量操作第五题 MyBatis框架适用场景 第一题. 映射器#{}和${}的区别 #{}是占位符&#xff0c;预编译处理&#xff1b;${}是拼接…

自动化部署fuel环境

自动化部署fuel环境流程图 自定义NAT网络 一、在物理机上面配置 &#xff08;1&#xff09;创建名为“management”的NAT网络 # vim /usr/share/libvirt/networks/management.xml <network> <name>management</name> <bridge name"virbr1"/&…

容器部署对比:通用容器部署 vs 使用腾讯云容器镜像服务(TCR)部署 Stable Diffusion

目录 引言1 通用容器部署的主要步骤1.1 准备环境1.2 构建 Docker 镜像1.3 上传镜像1.4 部署容器1.5 配置网络1.6 监控和维护 2 使用腾讯云容器镜像服务&#xff08;TCR&#xff09;部署的主要步骤2.1 下载 Stable Diffusion web UI 代码2.2 制作 Docker 镜像2.3 上传镜像到 TCR…

仰卧起坐计数,YOLOV8POSE

仰卧起坐计数&#xff0c;YOLOV8POSE 通过计算膝盖、腰部、肩部的夹角&#xff0c;计算仰卧起坐的次数

C语言自定义类型:枚举(C语言进阶)

目录 前言 1、枚举类型定义 2、枚举的优点 3、枚举的使用 结语 前言 本篇文章讲解C语言自定义类型&#xff1a;枚举类型。 枚举顾名思义就是一一列举&#xff0c;把可能的值一一列举。像一周的周一到周日可以枚举&#xff1b;每年12个月&#xff0c;可以枚举。 1、枚举类型…

163邮箱pop3设置方法?POP3服务开启步骤?

163邮箱pop3设置操作指南&#xff1f;163邮箱pop服务怎么开启&#xff1f; 要想更加便捷地管理邮件&#xff0c;开启POP3服务是一个不错的选择。当我们需要在其他邮件客户端上使用163邮箱时&#xff0c;就需要进行POP3设置。那么&#xff0c;163邮箱pop3设置方法究竟是怎样的呢…

算法第二十九天-森林中的兔子

森林中的兔子 题目要求 解题思路 重点&#xff1a;某个兔子回答x的时候&#xff0c;那么数组中最多循序x1个同花色的兔子同时回答x 我们可以通过举例子得出一下的规律&#xff1a; 我们统计数组中所有回答x的兔子的数量n&#xff1a; 若n%(x1)0&#xff0c;说明我们此时只需…

appscan打开外部浏览器报无法连接

1、问题现象&#xff1a; 2、解决方法 再这个界面需要增加appscan的证书&#xff0c;如果是下面状态证明证书已经添加了&#xff0c;如果未加证书系统会提示添加证书&#xff1a;

便携式气象站的工作原理

TH-BQX9便携式自动气象观测仪器是一种集成了多种传感器和自动化技术的气象监测设备&#xff0c;以其便携性、自动化和高精度等特点&#xff0c;广泛应用于气象、环保、农业、科研等领域。 首先&#xff0c;它的便携性是其最大的优势之一。设计紧凑、轻便易携&#xff0c;使得用…

Swagger Array 使用指南:详解与实践

Swagger 允许开发者定义 API 的路径、请求参数、响应和其他相关信息&#xff0c;以便生成可读性较高的文档和自动生成客户端代码。而 Array &#xff08;数组&#xff09;是一种常见的数据结构&#xff0c;用于存储和组织多个相同类型的数据元素。数组可以有不同的维度和大小&a…

美区PayPal绑visa卡注意事项

很多小伙伴都有绑定paypal的需求&#xff0c;但是如果你是绑定美区的paypal这里有几点建议&#xff1a; 1、建议使用US的网络环境注册 2、使用美区的账号 3、使用美区的visa卡 三者统一才可以绑定成功&#xff0c;点击获取可以绑定美区paypal的visa卡&#xff0c;办理简单

绿色再生·安卓4G智能远程操作巡视机器人小车

一、前言 1.1 项目介绍 【1】项目功能介绍 随着物联网技术与移动通信技术的快速发展&#xff0c;远程遥控设备在日常生活及工业应用中的普及度日益提高。无论是家用扫地机器人实现自主导航清扫&#xff0c;还是目前抖音平台上展示的实景互动小车等创新应用&#xff0c;都体现…

固态硬盘有坏道怎么恢复数据 固态硬盘坏道怎么修复

固态硬盘是一种高速、低噪音、低功耗的存储设备,但是它也有一个致命的问题——坏道。坏道是指存储芯片中的某些存储单元出现了故障,导致数据无法正常读取或写入。如果你的固态硬盘出现了坏道,那么你的数据就有可能会丢失,带来了很大的困扰。那么,固态硬盘有坏道怎么恢复数…

Web 开发模式演进过程

作为初学者&#xff0c;要了解 Web 开发模式的演进过程&#xff0c;并从这些演进过程中看到变化&#xff0c;这样有利于开发者的思路提升。 什么是 Web 开发 Web &#xff1a;网页&#xff0c;可以通过浏览器访问的资源 Web 开发&#xff1a;基于网页载体的软件开发&#xff…

无人咖啡机品质之选,D 咖助力差异化竞争

在当今竞争激烈的商业环境中&#xff0c;如何脱颖而出成为众多企业关注的焦点。而无人咖啡机的出现&#xff0c;为商家提供了一个全新的思路。D 咖无人咖啡机&#xff0c;以其卓越的品质和独特的功能&#xff0c;成为了商家们实现差异化竞争的得力助手。 1. 卓越品质&#xff1…