【Lintcode】1082. Employee Importance

題目地址:

https://www.lintcode.com/problem/employee-importance/description

給定一個Employee類的列表,Employee有三個變量,兩個int型變量分別是id和importance,還有一個Employee列表的變量,內容是其下屬的id。給定一個employee的id,要求返回其與其所有下屬(直接的間接的都算)的importance總和。

思路是DFS,本質上是多叉樹的深搜。代碼如下:

import java.util.List;

public class Solution {
    /**
     * @param employees:
     * @param id:
     * @return: the total importance value
     */
    public int getImportance(List<Employee> employees, int id) {
        // Write your code here.
        if (employees == null || employees.isEmpty()) {
            return 0;
        }
        
        return dfs(employees.get(id - 1), employees);
    }
    
    private int dfs(Employee employee, List<Employee> employees) {
        int res = employee.importance;
        for (int subordinate : employee.subordinates) {
        	// 累加各個下屬子樹的所有importance總和
            res += dfs(employees.get(subordinate - 1), employees);
        }
        
        return res;
    }
}

class Employee {
    int id, importance;
    List<Integer> subordinates;
}

時間複雜度O(n)O(n),空間O(h)O(h),分別是樹節點個數和樹高。

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章