給定一個保存員工信息的數據結構,它包含了員工 唯一的 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, 5, [2, 3]], [2, 3, []], [3, 3, []]], 1
輸出:11
解釋:
員工 1 自身的重要度是 5 ,他有兩個直系下屬 2 和 3 ,而且 2 和 3 的重要度均為 3 。因此員工 1 的總重要度是 5 + 3 + 3 = 11 。
提示:
一個員工最多有一個 直系 領導,但是可以有多個 直系 下屬
員工數量不超過 2000 。
解題思路
從目標員工為根節點,遞歸搜索子節點
代碼
/*** Definition for Employee.* type Employee struct {* Id int* Importance int* Subordinates []int* }*/var res int
func getImportance(employees []*Employee, id int) int {
res=0cnt:=make(map[int]*Employee)for _, employee := range employees {cnt[employee.Id]=employee}dfs(id,cnt)return res
}
func dfs(i int,cnt map[int]*Employee) {res+=cnt[i].Importancefor _, subordinate := range cnt[i].Subordinates {dfs(subordinate,cnt)}
}