天天看點

LeetCode_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:

輸入: [[1, 5, [2, 3]], [2, 3, []], [3, 3, []]], 1
輸出: 11
解釋:
員工1自身的重要度是5,他有兩個直系下屬2和3,而且2和3的重要度均為3。是以員工1的總重要度是 5 + 3 + 3 = 11。
注意:

一個員工最多有一個直系上司,但是可以有多個直系下屬
員工數量不超過2000。      
/*
// Employee info
class Employee {
public:
    // It's the unique ID of each node.
    // unique id of this employee
    int id;
    // the importance value of this employee
    int importance;
    // the id of direct subordinates
    vector<int> subordinates;
};
*/
class Solution {
public:
    void dfs(map<int,Employee*> &m,int id,int &sum){
        sum+=m[id]->importance;
        for(auto e:m[id]->subordinates){
            dfs(m,e,sum);
        }
    }
    int getImportance(vector<Employee*> employees, int id) {//employees是一個存放Employee指針的vector
        map<int,Employee*> m;//定義指針指向Employee
        for(int i=0;i<employees.size();i++){
            m[employees[i]->id]=employees[i];
        }
        int sum=0;
        dfs(m,id,sum);
        return sum;
    }
};      

繼續閱讀