zoukankan      html  css  js  c++  java
  • 690. 员工的重要性

    给定一个保存员工信息的数据结构,它包含了员工 唯一的 id ,重要度 和 直系下属的 id 。

    比如,员工 1 是员工 2 的领导,员工 2 是员工 3 的领导。他们相应的重要度为 15 , 10 , 5 。那么员工 1 的数据结构是 [1, 15, [2]] ,员工 2的 数据结构是 [2, 10, [3]] ,员工 3 的数据结构是 [3, 5, []] 。注意虽然员工 3 也是员工 1 的一个下属,但是由于 并不是直系 下属,因此没有体现在员工 1 的数据结构中。

    现在输入一个公司的所有员工信息,以及单个员工 id ,返回这个员工和他所有下属的重要度之和。

    示例:

    输入:[[1, 5, [2, 3]], [2, 3, []], [3, 3, []]], 1
    输出:11
    解释:
    员工 1 自身的重要度是 5 ,他有两个直系下属 2 和 3 ,而且 2 和 3 的重要度均为 3 。因此员工 1 的总重要度是 5 + 3 + 3 = 11 。
    

    提示:

    • 一个员工最多有一个 直系 领导,但是可以有多个 直系 下属
    • 员工数量不超过 2000 。

    递归

    """
    # Definition for Employee.
    class Employee:
        def __init__(self, id: int, importance: int, subordinates: List[int]):
            self.id = id
            self.importance = importance
            self.subordinates = subordinates
    """
    
    class Solution:
        def getImportance(self, employees: List['Employee'], id: int) -> int:
            res=0
            for e in employees:
                if e.id==id:
                    res+=e.importance
                    subordinate=e.subordinates
                    break
            for e in employees:
                if e.id in subordinate:
                    res+=e.importance
                    if e.subordinates:
                        for i in e.subordinates:
                            res+=self.getImportance(employees,i)
            return res
    """
    # Definition for Employee.
    class Employee:
        def __init__(self, id: int, importance: int, subordinates: List[int]):
            self.id = id
            self.importance = importance
            self.subordinates = subordinates
    """
    
    class Solution:
        def getImportance(self, employees: List['Employee'], id: int) -> int:
            for e in employees:
                if e.id==id:
                    if not e.subordinates:
                        return e.importance
                    for i in e.subordinates:
                        e.importance+=self.getImportance(employees,i)                   
                    return e.importance
            return 0

    dict+递归

    """
    # Definition for Employee.
    class Employee:
        def __init__(self, id: int, importance: int, subordinates: List[int]):
            self.id = id
            self.importance = importance
            self.subordinates = subordinates
    """
    
    class Solution:
        def getImportance(self, employees: List['Employee'], id: int) -> int:
            dict={}
            for e in employees:
                dict[e.id]=e
            def helper(dict,id):
                e=dict[id]
                for i in e.subordinates:
                    e.importance+=helper(dict,i)
                return e.importance
            return helper(dict,id)

    stack or queue

    """
    # Definition for Employee.
    class Employee:
        def __init__(self, id: int, importance: int, subordinates: List[int]):
            self.id = id
            self.importance = importance
            self.subordinates = subordinates
    """
    
    class Solution:
        def getImportance(self, employees: List['Employee'], id: int) -> int:
            dict={}
            for e in employees:
                dict[e.id]=e
            q=[dict[id]]
            res=0
            while q:
                e=q.pop(0)
                res+=e.importance
                for i in e.subordinates:
                    q.append(dict[i])
            return res
  • 相关阅读:
    2018年工作总结
    通过js date对象获取各种开始结束日期的示例
    位运算
    Nhibernate官方体系结构图部分中文翻译
    javascript中判断变量是否存在的正确方式
    .net core 项目加载提示项目文件不完整缺少预期导入的解决办法
    dotnet core 运行程序注意事项
    关于.net 项目 nuget包还原项目失败的记录
    c#利用反射实现对类中的常量进行取值和对应常量的注释
    在ie9下在textbox框里面输入内容按enter键会触发按钮的事件
  • 原文地址:https://www.cnblogs.com/xxxsans/p/14724055.html
Copyright © 2011-2022 走看看