員工的重要性


此博客鏈接:

員工的重要性

題目鏈接:https://leetcode-cn.com/problems/employee-importance/

給定一個保存員工信息的數據結構,它包含了員工唯一的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。

題解:

       思路:看完題目,我以為是求直系下屬的重要性,並且示例也都是只有直系下屬,沒有下屬的下屬,這。。。然后我一頓操作,看着直接按照一維算的。而且取值也不對。

一開始我是這樣寫的:

class Solution {
    public int getImportance(List<Employee> employees, int id) {
        if(List[id].subordinates==null)
        return List[id].importance;
        int len=List[id].subordinates.size();
        int sum=List[id].importance;
        for(int i=0;i<len;i++)
        {
             sum=sum+List[List[id].subordinates(i)].importance;
        }
        return sum;
    }
}

 后來改了一波,發現自己真是啥也不會啊,真是菜啊,下面代碼是意向天開,自認為題目給的Id是按照順序的,但是,不現實。

錯誤2代碼

class Solution {
    public int getImportance(List<Employee> employees, int id) {
        if(employees[id].subordinates==null)
        return employees[id].importance;
        int len=employees[id].subordinates.size();
        int sum=employees[id].importance;
        for(int i=0;i<len;i++)
        {
             sum=sum+employees[employees[id].subordinates(i)].importance;
        }
        return sum;
    }
}

對上面代碼進行修改,因為題目給的員工的id不一定是按照順序給的,所以我們需要遍歷List,取List中的id和給的id做比較,然后再訪問下屬。

重新整理一下思路:huangfei

                            本題是讓求重要性,那么一個老板可以有好多下屬,下屬可能還有下屬,這些都要算重要性。

                 首先,我們先找到給的id的員工,這個員工可能有下屬,找這個員工的下屬,找到下屬后,下屬可能還存在下屬,直到找到最后一個員工沒有下屬為止,把所有員工的重要性加載一起,就是題目所求的。

       這里特別像樹的結構,一個節點下面存在孩子,孩子可能還存在孩子,遍歷到孩子節點,把所有節點的重要性全加一起。這里我采用層次遍歷,遍歷員工的Id,進隊列,在節點出隊列時,把節點的重要性加起來,並把當前節點的下屬進隊列。

 

class Solution {
    public int getImportance(List<Employee> employees, int id) {
    Queue <Integer> queue=new LinkedList();
    int result=0;
    for(Employee e:employees)
    {
        if(e.id==id)
        {
         queue.add(id);
        }
    }
    while(!queue.isEmpty()){
            int len=queue.size();   
            for(int i=0;i<len;i++)
            {
                 int temp=queue.poll();
                 for(Employee e:employees)
                 {
                    if(e.id==temp)
                    {
                        result=result+e.importance;
                    for(Integer num:e.subordinates)
                    {
                        queue.add(num);
                    }
                    break;
                    } 
                    
                 }
            }

    }
return result;

    }
}

 

 

哈哈,雖然寫的爛,但是好歹ac了。


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM