員工的重要性(力扣:690)

員工的重要性


題目

員工的重要性(力扣: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;
    }

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