leedcode1376题class Solution { public: int numOfMinutes(int n, int headID, vector<int>& manager, vector<int>& informTime) { //找headID到员工的最大值,递归:中间领导人也会成为headID int res=0; res+=informTime[headID]; manager.erase(manager.begin()+headID); informTime.erase(informTime.begin()+headID); int maxSUM=0; for(int i=0;i<manager.size();i++){ if(manager[i]==headID){ maxSUM=max(maxSUM,numOfMinutes(manager.size(),i,manager,informTime)); cout<<i<<" "; } } cout<<endl; return res+maxSUM; } };改正代码
时间: 2024-02-06 19:04:07 浏览: 57
实测,可行 非常好用 欢迎下载
以下是修改后的代码:
```
class Solution {
public:
int numOfMinutes(int n, int headID, vector<int>& manager, vector<int>& informTime) {
int res = 0;
// 遍历下属,找到下属中需要花费时间最长的那一个
for (int i = 0; i < n; i++) {
if (manager[i] == headID) {
res = max(res, numOfMinutes(n, i, manager, informTime));
}
}
// 加上当前领导向下属传递信息所需要的时间
return res + informTime[headID];
}
};
```
主要修改如下:
1. 删除了原代码中的 `manager.erase(manager.begin()+headID)` 和 `informTime.erase(informTime.begin()+headID)`,因为这样会改变原始的输入数据,导致后续的递归出现问题;
2. 将原代码中的递归改为循环遍历,每次遍历找到下属中需要花费时间最长的那一个,并将其返回的时间和当前领导向下属传递信息所需要的时间相加。
阅读全文