1376 TIme needed to inform all employees

这是一个汇报工作时间长度的题

建立MAP,   因为存在层级关系,因此内部为ARRAYLIST,

 

DFS, 

Integer,遍历整体层级数,分情况,如果为-1, 不执行;如果不包括manager i, 建立新ARRAYLIST,表中增加新节点,并把它放在图中。否则,GRAPH包括manger i,增加节点i ,放到图中。 

 

计算图中时间,返回所需时间。

 

在借助DFS函数时, t=t+informtime[headID]

 

 

class Solution {
    int time_needed=0;
   
    public int numOfMinutes(int n, int headID, int[] manager, int[] informTime) {
        Map<Integer,ArrayList<Integer>>graph= new HashMap<>();
        for(int i=0;i<n;i++){
            if(manager[i]==-1)continue;
            if(!graph.containsKey(manager[i])){
                ArrayList<Integer>list= new ArrayList<>();
                list.add(i);
                graph.put(manager[i],list);
               
            }
            else{
                ArrayList<Integer> list=graph.get(manager[i]);
                list.add(i);
                graph.put(manager[i],list);
            }
        }
        calculateTime(headID,graph,informTime,0);
        return time_needed;
    }
    private void calculateTime(int headID,Map<Integer,ArrayList<Integer>>graph,int[] informTime,int t){
        if(informTime[headID]==0){return;}
        t=t+informTime[headID];
        ArrayList<Integer>temp=graph.get(headID);
        int s=temp.size();
        for(int i=0;i<s;i++){
            calculateTime(temp.get(i),graph,informTime,t);
            if(t>time_needed){ time_needed=t;}
        }
    }
}
 
 
posted @ 2022-07-19 01:20  flag!  阅读(30)  评论(0)    收藏  举报