トピック:
あなたは従業員の一意なID、彼の重要度と彼の直接の部下のIDを含んでいる従業員情報のデータ構造を与えられています。
例えば、従業員1は、従業員2のリーダーであり、従業員2は、それらが、それぞれ、重要度15、10及び5を有する3従業員のリーダーです。その後、従業員1のようなデータ構造[1、15、[2]を有し、従業員2 [2、10、[3]を有し、従業員3 [3、5、[]]を有します。社員3はまた、従業員1の配下であるが、関係は直接的ではないことに留意されたいです。
現在、同社の従業員情報を与えられ、そして従業員IDは、あなたがこの従業員の合計重要度の値とすべての部下を返却する必要があります。
例1:
入力:[[1、5、[2、3]、[2、3、[]]、[3、3、[]]]、1つの 出力:11 説明: 従業員1は、重要度の値5を持っており、彼が持っています2人の直接部下:従業員1の合計重要度値は5 + 3 + 3 = 11となるように、従業員2及び社員3はどちらも重要度3を有します。
注意:
- 一つの従業員は、多くても1人の直接的な指導者であり、いくつかの部下を持つことができます。
- 従業員の最大数は2000を超えることはありません。
分析:
idと重要度、並びにその部下のIDのリストを含むデータ構造を格納した従業員情報が、あります。さて、このような従業員、検索の従業員と重要性とすべての下位の程度の配列を与えられました。
まず、アレイを通して、従業員とマップへのそれらの対応する従業員のIDは、私たちはそれに直接情報を取得するのに役立ちます。
初めから続いて深さ優先探索は、IDを検索し、その再帰的なソリューションをすることができます。また、あなたはキューが空で知ることができ、蓄積の重要性を、各従業員がキューに従属なり、BFSを使用することができます。
手順:
C ++
/ * //従業員のインフォ クラス従業員{ パブリック: //これは、各ノードの一意のIDです。 //この従業員の一意のID int型のID。 //この従業員の重要性値 int型の重要性; //直接の部下のID ベクトル<整数>部下。 }。 * / クラスソリューション{ パブリック: INT getImportance(ベクトル<従業員*>従業員、int型のID){ unordered_map < INT、従業員*> M。 用(オートEM:従業員){ m.insert({EM - >ID、EM})。 } 戻りDFS(ID、M)。 } プライベート: int型 DFS(INT ID、unordered_map < INT、従業員*>&M){ int型の和= M [ID] - > 重要性。 以下のための(自動I:M [ID] - > 部下){ 合計 + = DFS(I、M)。 } 戻り値の和。 } }。
ジャワ
/ * //従業員のインフォ クラスEmployee { //これは、各ノードの一意のIDです。 //この従業員の一意のID 公共int型のID。 //この従業員の重要性値 の公共のint型の重要性; //直接の部下のID 公共一覧<整数>部下。 }。 * / クラスソリューション{ 公共 のint getImportance(一覧<従業員>従業員、INT ID){ HashMapの <整数、従業員> M = 新規 HashMapの<> (); 用(従業員E:従業員){ m.put(e.id、E)。 } 戻りDFS(ID、M)。 } プライベート int型の DFS(int型の ID、ハッシュマップ<整数、従業員> M){ int型の和= m.get(ID).importance。 以下のための(整数I:m.get(ID).subordinates) 合計 + = DFS(I、M)。 戻り値の合計。 } }