690.従業員の重要性(Python)

2281 ワード

タイトル
難易度:★☆☆タイプ:ツリー構造、パズル
従業員情報を保存するデータ構造が与えられ、従業員固有のid、重要度、直系部下のidが含まれます.
例えば、従業員1は従業員2のリーダーであり、従業員2は従業員3のリーダーである.彼らの対応する重要度は15,10,5である.では、従業員1のデータ構造は[1,15,[2]]、従業員2のデータ構造は[2,10,[3]]、従業員3のデータ構造は[3,5,[]]である.注意従業員3も従業員1の1つの部下であるが、直系部下ではないため、従業員1のデータ構造には現れていない.
今、1つの会社のすべての従業員情報と、1人の従業員idを入力して、この従業員と彼のすべての部下の重要度の和を返します.
1人の従業員には最大1人の直系リーダーがいますが、複数の直系部下の従業員数は2000を超えません.

入力:[[1,5,[2,3]],[2,3,[],[3,3,[]],1出力:11説明:従業員1自身の重要度は5であり、彼は2つの直系部下2と3を持っており、2と3の重要度はいずれも3である.したがって、従業員1の総重要度は5+3+3=11です.
に答える
符号化を容易にするために、まず重要度辞書と部下辞書を構築し、従業員一人一人の重要性と部下はこの2つの辞書で迅速に見ることができます.さらに、ツリーの階層遍歴でよく見られるキュー構造を使用して関数を構築し、従業員のすべての部下のidを取得します.最後に、すべての部下の重要性を合計することで、ある従業員とその部下の総重要性を迅速に見つけることができます.
class Employee:
    def __init__(self, id, importance, subordinates):
        # It's the unique id of each node.
        # unique id of this employee
        self.id = id
        # the importance value of this employee
        self.importance = importance
        # the id of direct subordinates
        self.subordinates = subordinates


class Solution:
    def getImportance(self, employees, id):
        """
        :type employees:
        :type id: int
        :rtype: int
        """
        importance = {e.id: e.importance for e in employees}        #      {  :    }
        subordinates = {e.id: e.subordinates for e in employees}    #     {  :     }

        def get_subordinates(id):                   #             
            all_staff = []                          #     
            queue = [id]                            #     
            while queue:                            #        
                staff = queue.pop(0)                #       
                all_staff.append(staff)             #           
                queue.extend(subordinates[staff])   #           
            return all_staff                        #         

        return sum([importance[staff] for staff in get_subordinates(id)])       #            


if __name__ == "__main__":
    employees_data = [[1, 5, [2, 3]], [2, 3, []], [3, 3, []]]
    employees = [Employee(e[0], e[1], e[2]) for e in employees_data]
    s = Solution()
    print(s.getImportance(employees, 1))

質問やアドバイスがあれば、コメントエリアへようこそ~