Leetcode 1376. 通知所有员工所需的时间

118 阅读1分钟

题目地址

解题思路

本题属于抽象树的题目,题目给定的条件当中并没有给出树的结构,需要我们根据题目当中给定的已知条件创建一颗N叉树,然后再进行深度遍历。

有向图BFS基本套路:

1、先构造一张邻接表,记录上级与下属的一对多关系。

2、使用队列做BFS遍历,队列中的节点使用自定义对象:节点id和到达节点的时间,其中时间是上级节点的到达时间加上级节点到此节点的路程时间。

3、遍历中使用函数变量记录最大时间值。

示例代码

func numOfMinutes(n int, headID int, manager []int, informTime []int) int {
   graph := map[int][]int{}
   for i, v := range manager {
      if q, ok := graph[v]; ok {
         graph[v] = append(q, i)
      } else {
         graph[v] = []int{i}
      }
   }
   queue := []*Node{&Node{
      id:   headID,
      time: 0,
   }}
   maxTime := 0

   for len(queue) > 0 {
      node := queue[0]
      queue = queue[1:]
      for _, next := range graph[node.id] {
         curTime := node.time + informTime[node.id]
         queue = append(queue, &Node{
            id:   next,
            time: curTime,
         })
         maxTime = max(curTime, maxTime)
      }
   }

   return maxTime
}

func max(a, b int) int {
   if a > b {
      return a
   } else {
      return b
   }
}