員工的重要性
題目
員工的重要性(力扣: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,返回這個員工和他所有下屬的重要度之和。
分析
該題的數據結構,其實就是一個樹的結構。題目可以抽象爲,查找某個員工爲根節點的,員工自己和它的所有下屬的重要性之和。
我們可以使用輔助Map來幫助我們實現快速查找員工。
代碼實現
class Employee {
public int id;
public int importance;
public List<Integer> subordinates;
};
Map<Integer, Employee> employeeMap = new HashMap<>();
/**
* 690. 員工的重要性
* @param employees
* @param id
* @return
*/
public int getImportance(List<Employee> employees, int id) {
for (Employee employee : employees){
employeeMap.put(employee.id, employee);
}
return searchImportance(employeeMap.get(id), id);
}
private int searchImportance(Employee employee, int id){
if (employee == null || id <= 0){
return 0;
}
int sum = employee.importance;
for (Integer subId : employee.subordinates){
sum += searchImportance(employeeMap.get(subId), subId);
}
return sum;
}