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

news/2024/12/13 17:43:21/

目录链接:

力扣编程题-解法汇总_分享+记录-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://www.ppmy.cn/news/56977.html

相关文章

RK3588平台开发系列讲解(进程篇)Linux中进程的一生

平台内核版本安卓版本RK3588Linux 5.10Android 12文章目录 一、Linux 系统中进程的一生二、Linux 系统中的进程树三、Linux 进程的分类四、进程优先级五、进程系统调用沉淀、分享、成长,让自己和他人都能有所收获!😄 📢本篇将介绍 Linux 进程的相关知识。 一、Linux 系统…

多线程、协程和多进程并发编程

37.1 如何通俗理解线程和进程&#xff1f; 进程&#xff1a;进程就是正在执⾏的程序。 线程&#xff1a;是程序执⾏的⼀条路径, ⼀个进程中可以包含多条线程。 通俗理解&#xff1a;例如你打开抖⾳&#xff0c;就是打开⼀个进程&#xff0c;在抖⾳⾥⾯和朋友聊天就是开启了⼀条…

Docker基础知识全解析

​ Docker是一个开源的容器化平台&#xff0c;可以让开发者在容器中构建、打包、运行和发布应用程序&#xff0c;从而实现应用程序的快速部署和可移植性。Docker将应用程序和依赖项打包在一个轻量级的可移植容器中&#xff0c;这个容器可以在任何平台上运行&#xff0c;不会受到…

计算机组成原理第五章(2)---中断

5.1概述 产生和应用 在IO设备和主机交换数据时&#xff0c;由于设备本身的机电特性的影响&#xff0c;其工作速度比较低&#xff0c;与CPU无法匹配&#xff0c;如果采用程序查询的方式需要CPU进行等待&#xff0c;但是如果在等待的过程中CPU可以执行其他的程序&#xff0c;可…

arthas--watch函数执行数据观测

目录 背景 参数说明 参考 背景 watch能方便的观察到指定函数的调用情况。能观察到的范围为&#xff1a;返回值、抛出异常、入参&#xff0c;通过编写 OGNL 表达式进行对应变量的查看。ognl学习&#xff0c;可以参考&#xff1a;https://xiaopanjia.blog.csdn.net/article/d…

制造管理与生产管理,到底哪个更重要?

制造工业是各个国家经济的重要组成部分&#xff0c;也是整体经济运行的基础。生产管理则是制造工业的核心。随着科技和全球市场的飞速发展&#xff0c;制造和生产管理面临着新的挑战和机遇。优秀的制造和生产管理能力是一个企业取得成功的关键之一。 一、制造管理的概念及现状…

IS-IS协议基础知识

文章目录 前言介绍地址格式报文格式区域及路由器类型区域类型路由器类型Level-1 路由器Level-2 路由器Level-1-2路由器 IS-IS 网络类型DIS及伪节点伪节点DIS与OSPF的DR/BDR不同之处 IS-IS 邻接关系握手报文邻接关系的建立 IS-IS 链路状态数据库概述数据库同步报文泛洪机制数据库…

js 操作数组内容

js 操作数组内容 数组添加元素&#xff08;更改原数组&#xff09; push和unshift会返回添加了新元素的数组长度 push从数组最后加入&#xff0c;unshift从数组最前面加入 const arr ["a", "b", "c"]; arr.push("d"); //返回4…