【发布时间】:2022-01-06 07:56:05
【问题描述】:
今天在解决有关 leetcode 的问题时,我在 O(N) 时间运行的有向图上应用了 dfs,但是我的代码给出了 TLE,所以在尝试了太多时间后,我检查了 cmets,并且有一个接受的代码它也在 O(N) 上运行。所以现在我很困惑为什么我的代码没有被接受并且超出了时间限制。 我的代码:-
public:
int ans=INT_MIN;
vector<vector<int>> gr;
void dfs(int head, int time, vector<int> inform){
if(gr[head].size()==0) {ans=max(ans,time);return;}
for(auto next:gr[head]){
dfs(next, inform[head]+time, inform);
}
}
int numOfMinutes(int n, int headID, vector<int>& manager, vector<int>& informTime) {
gr.resize(n);
for(int i=0 ; i<n ; i++){
if(manager[i]!=-1) gr[manager[i]].push_back(i);
}
dfs(headID,0, informTime);
return ans;
}
接受的代码之一:-
int numOfMinutes(int n, int headID, vector<int>& manager, vector<int>& informTime) {
int res = 0;
for (int i = 0; i < n; ++i)
res = max(res, dfs(i, manager, informTime));
return res;
}
int dfs(int i, vector<int>& manager, vector<int>& informTime) {
if (manager[i] != -1) {
informTime[i] += dfs(manager[i], manager, informTime);
manager[i] = -1;
}
return informTime[i];
}
如果有人需要问题链接:- https://leetcode.com/problems/time-needed-to-inform-all-employees/
【问题讨论】:
-
想想在每种情况下向量被复制了多少次。
标签: c++ data-structures graph coding-style depth-first-search