博客
关于我
力扣 690. 员工的重要性
阅读量:353 次
发布时间:2019-03-04

本文共 1226 字,大约阅读时间需要 4 分钟。

为了解决这个问题,我们需要找到某个员工及其所有直系下属的重要度之和。我们可以将员工信息看作是一个树形结构,其中每个员工是一个结点,直系下属是子节点。我们可以使用广度优先搜索(BFS)来高效地遍历整个子树,计算所有重要度之和。

方法思路

  • 建立邻接表:使用字典存储员工信息,以快速查询每个员工的重要度和下属列表。
  • 广度优先搜索(BFS):从目标员工开始,遍历所有直系下属,累加重要度。BFS确保我们按层次遍历,避免递归深度问题。
  • 解决代码

    import sysfrom collections import dequedef get_importance(employees, target_id):    # 创建邻接表    table = {}    for employee in employees:        employee_id = employee[0]        importance = employee[1]        subordinates = employee[2]        table[employee_id] = (importance, subordinates)        # 初始化队列并设置结果    queue = deque([target_id])    total_importance = 0        while queue:        current_id = queue.popleft()        imp, subs = table[current_id]        total_importance += imp        # 将下属加入队列        queue.extend(subs)        return total_importanceif __name__ == "__main__":    # 示例输入    input_employees = [        [1, 5, [2, 3]],        [2, 3, []],        [3, 3, []]    ]    target_id = 1    result = get_importance(input_employees, target_id)    print(result)

    代码解释

  • 邻接表构建:遍历输入的员工列表,构建一个字典table,键为员工ID,值为一个元组包含重要度和下属列表。
  • 队列初始化:使用队列从目标员工开始遍历,队列初始只包含目标员工ID。
  • BFS遍历:每次从队列中取出当前员工ID,累加其重要度,并将其下属ID加入队列,继续遍历。
  • 返回结果:当队列为空时,累加所有重要度即为所求结果。
  • 这种方法确保了我们能够高效地遍历整个子树,计算所有重要度之和。BFS的时间复杂度为O(N),其中N是员工数量,适用于处理较大的数据量。

    转载地址:http://jscr.baihongyu.com/

    你可能感兴趣的文章
    php循环比较数组中的值,如何从PHP数组中计算值并在foreach循环中仅显示一次值?...
    查看>>
    php微信 开发笔记,微信WebApp开发总结笔记
    查看>>
    php微信公众号开发access_token获取
    查看>>
    php微信公众号开发微信认证开发者
    查看>>
    php微信公众号开发用户基本信息
    查看>>
    php怎么将对象变成数组,php怎么将对象转换成数组
    查看>>
    RabbitMQ - 消息堆积问题的最佳解决方案?惰性队列
    查看>>
    php怎样比较两数大小,jquery如何判断两个数值的大小
    查看>>
    PHP性能监控 - 开启xhprof(一)
    查看>>
    PHP性能监控 - 怎么看xhprof报告(二)
    查看>>
    php截取字符串代码,PHP字符串截取_php
    查看>>
    php截取字符串,无乱码
    查看>>