题目
思路
这个题首先需要将员工与上级的关系存到一个二维数组中;
然后自顶向下递归调用calculate()函数,这个函数的作用是计算一个节点通知到其所有下属的时间;
代码
class Solution {
public:
//calculate()函数用来计算某一节点通知其所有下属所用的时间
int calculateTime(vector<vector<int>>& relTree, vector<int>& informTime, int ID){
//递归结束的条件:当前节点没有下属,即它的数组大小为零
if(relTree[ID].size() == 0) return 0;
int maxTime = 0;
//计算一个节点时需要递归计算下属所用的时间,然后取最大值
for(int i=0; i<relTree[ID].size(); i++){
int curTime = calculateTime(relTree, informTime, relTree[ID][i]);
if(curTime > maxTime) maxTime = curTime;
}
//返回结果是当前节点所用时间+所有下属节点的最大值
return maxTime + informTime[ID];
}
int numOfMinutes(int n, int headID, vector<int>& manager, vector<int>& informTime) {
//建关系树
vector<vector<int>> relTree;
relTree.resize(n);
for(int i=0; i<n; i++){
if(manager[i] != -1){
relTree[manager[i]].push_back(i);
}
}
//开始自顶向下递归求解
int ans =0;
ans = calculateTime(relTree, informTime, headID);
return ans;
}
};