[ハッシュ-シンプル] 690。従業員の重要性(キュー+ dfs 2つのソリューション)

[タイトル]
従業員情報を保存するデータ構造を考えると、従業員の一意のID、重要度、および直属の部下のIDが含まれています。
たとえば、従業員1は従業員2のリーダーであり、従業員2は従業員3のリーダーです。それらに対応する重要性は15、10、5です。この場合、従業員1のデータ構造は[1、15、[2]]、従業員2のデータ構造は[2、10、[3]]、従業員3のデータ構造は[3、5、[]です。 ]。従業員3も従業員1の部下ですが、直接の部下ではないため、従業員1のデータ構造には反映されないことに注意してください。
ここで、会社のすべての従業員情報と1人の従業員IDを入力して、この従業員とそのすべての部下の重要度の合計を返します。
【例1】
入力:[[1、5、[2、3]]、[2、3、[]]、[3、3、[]]]、1
出力:11
説明:
従業員1自身の重要性5、彼には2人の直属の部下2と3がいて、2と3の重要性は両方とも3です。したがって、従業員1の合計重要度は5 + 3 + 3 = 11です。
【注】
直属のリーダーは1名までですが、直属の部下は複数存在する場合があります
。従業員数は2000名を超えません。
[コード]
[Python]
実行時間:
164ミリ秒、すべてのPython3送信でユーザーの66.67%を破った
メモリ消費量:
16 MB、すべてのPython3送信でユーザーの48.89%を破った

"""
# 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:
        findID=dict()
        for index,em in enumerate(employees):
            findID[em.id]=index
        idlist=[id]
        value=0
        while idlist:
            value+=employees[findID[idlist[0]]].importance
            idlist.extend(employees[findID[idlist[0]]].subordinates)
            idlist.pop(0)
        return value

[方法2:dfs]

class Solution(object):
    def getImportance(self, employees, query_id):
        emap = {
    
    e.id: e for e in employees}
        def dfs(eid):
            employee = emap[eid]
            return (employee.importance +
                    sum(dfs(eid) for eid in employee.subordinates))
        return dfs(query_id)

おすすめ

転載: blog.csdn.net/kz_java/article/details/114488196