​力扣解法汇总1376. 通知所有员工所需的时间

news/2024/7/7 22:22:50

目录链接:

力扣编程题-解法汇总_分享+记录-CSDN博客

GitHub同步刷题项目:

https://github.com/September26/java-algorithms

原题链接:力扣


描述:

公司里有 n 名员工,每个员工的 ID 都是独一无二的,编号从 0 到 n - 1。公司的总负责人通过 headID 进行标识。

在 manager 数组中,每个员工都有一个直属负责人,其中 manager[i] 是第 i 名员工的直属负责人。对于总负责人,manager[headID] = -1。题目保证从属关系可以用树结构显示。

公司总负责人想要向公司所有员工通告一条紧急消息。他将会首先通知他的直属下属们,然后由这些下属通知他们的下属,直到所有的员工都得知这条紧急消息。

第 i 名员工需要 informTime[i] 分钟来通知它的所有直属下属(也就是说在 informTime[i] 分钟后,他的所有直属下属都可以开始传播这一消息)。

返回通知所有员工这一紧急消息所需要的 分钟数 。

示例 1:

输入:n = 1, headID = 0, manager = [-1], informTime = [0]
输出:0
解释:公司总负责人是该公司的唯一一名员工。

示例 2:

输入:n = 6, headID = 2, manager = [2,2,-1,2,2,2], informTime = [0,0,1,0,0,0]
输出:1
解释:id = 2 的员工是公司的总负责人,也是其他所有员工的直属负责人,他需要 1 分钟来通知所有员工。
上图显示了公司员工的树结构。

提示:

  • 1 <= n <= 10^5
  • 0 <= headID < n
  • manager.length == n
  • 0 <= manager[i] < n
  • manager[headID] == -1
  • informTime.length == n
  • 0 <= informTime[i] <= 1000
  • 如果员工 i 没有下属,informTime[i] == 0 。
  • 题目 保证 所有员工都可以收到通知。

 

解题思路:

* 解题思路:
* 最常规的思路,肯定是根据输入值生成树结构。但是这样代码较长,而且效率较低,所以我们直接模仿这种树的节点遍历的方式来进行。
* 首先,构建一个map,key为bossId,value为List,存放所有下属的ID。
* 然后构建递归方法,递归方法中,输入bossId,返回其告之所有下属所需要的时间。
* 如果下属为0,则直接返回0。如果下属不为0,返回下属中最长的时间+自身告之的时间。

代码:

public class Solution1376 {

    public int numOfMinutes(int n, int headID, int[] manager, int[] informTime) {
        Map<Integer, List<Integer>> map = new HashMap<>();
        for (int i = 0; i < manager.length; i++) {
            int bossId = manager[i];
            List<Integer> subList = map.get(bossId);
            if (subList == null) {
                subList = new ArrayList<>();
                map.put(bossId, subList);
            }
            subList.add(i);
        }
        return search(headID, map, informTime);
    }

    private int search(int bossId, Map<Integer, List<Integer>> map, int[] informTime) {
        List<Integer> integers = map.get(bossId);
        if (integers == null || integers.size() == 0) {
            return 0;
        }
        int maxTime = 0;
        for (int id : integers) {
            maxTime = Math.max(search(id, map, informTime), maxTime);
        }
        return maxTime + informTime[bossId];
    }

}


http://lihuaxi.xjx100.cn/news/1089566.html

相关文章

C基础学习之C 输入 输出

目录 标准文件 getchar() & putchar() 函数 gets() & puts() 函数 scanf() 和 printf() 函数 当我们提到输入时&#xff0c;这意味着要向程序填充一些数据。输入可以是以文件的形式或从命令行中进行。C 语言提供了一系列内置的函数来读取给定的输入&#xff0c;并根…

恒源云使用

目录 一、OSS的使用 1、oss本地上传到服务器 2、oss服务器登录下载到服务器 3、oss服务器上下载到本地 二、解压缩 三、训练 四、训练结束自动关机、上传数据 五、查看实例储存空间 六、文件管理 七、其他 一、OSS的使用 首先先下载OSS工具&#xff1a;点击下载 注意…

使用TrieTree(字典树)来实现敏感词过滤

使用TrieTree&#xff08;字典树&#xff09;来实现敏感词过滤 1. 字典树定义 字典树&#xff08;TrieTree&#xff09;&#xff0c;是一种树形结构&#xff0c;典型应用是用于统计&#xff0c;排序和保存大量的字符串&#xff08;但不仅限于字符串,如01字典树&#xff09;。…

javaweb学习路线

HTML&#xff0c;CSS&#xff0c;JSAjax,AxiosVue,Element前端工程化&#xff0c;Vue脚手架MavenSpringBoot基础&#xff0c;基于SpringBoot进行讲解Spring的IOC&#xff0c;DI等SpringBoot SpringMVC基础Mysql&#xff0c;基于产品原型及需求分析&#xff0c;设计数据库表JDBC…

【Unity-UGUI控件全面解析】| InputField 输入框组件详解

🎬【Unity-UGUI控件全面解析】| InputField 输入框组件详解一、组件介绍二、组件属性面板2.1 Content Type(内容类型)三、代码操作组件四、组件常用方法示例4.1 代码限制输入字符4.2 校验文本输入格式4.3 校验输入文本长度💯总结🎬 博客主页:https://xiaoy.blog.csdn.…

前置操作:Kubernetes快速安装组件Kubectl Kubeadam Kubeinit

文章目录 配置K8S主从集群前置准备操作一&#xff1a;主节点操作 查看主机域名->编辑域名1.1 编辑HOST 从节点也做相应操作1.2 从节点操作 查看从节点102域名->编辑域名1.3 从节点操作 查看从节点103域名->编辑域名 二&#xff1a;安装自动填充&#xff0c;虚拟机默认…

ChatGPT实现服务器体验沙箱

服务器体验沙箱 IT 人员在学习一门新技术时&#xff0c;第一个入门门槛通常都是"如何在本地安装并成功运行"。因此&#xff0c;很多技术的官网都会通过沙箱技术&#xff0c;提供在线试用的 playground 或者按步模拟的 tour。让爱好者先在线尝试效果是否满足预期&…

Java 异常处理、日志

一、异常 1.Throwable Java异常类型的顶层父类&#xff0c;Throwable又派生出Error类和Exception类 Error(错误) NoClassDefFoundError&#xff1a; 找不到 class 定义异常。StackOverflowError&#xff1a; 深递归导致栈被耗尽而抛出的异常。OutOfMemoryError&#xff1a;…