[タイトル]
従業員情報を保存するデータ構造を考えると、従業員の一意の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)