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;}
}
}
}
浙公网安备 33010602011771号