为什么我的代码显示超出时间限制?
Why my code is giving Time Limit Exceeded?
今天在leetcode上做题的时候,我在一个运行时间为O(N)的有向图上应用了dfs,但是我的代码给出了TLE,所以在尝试了太多次之后我查看了评论并且有一个接受的代码也在 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];
}
如果有人需要问题link:-
https://leetcode.com/problems/time-needed-to-inform-all-employees/
在您的 dfs()
函数中,您按值传递 inform
,这意味着编译器会在您每次调用该函数时复制 inform
,而不是 inform
本身。
您应该改为通过引用传递。
void dfs(int head, int time, vector<int> &inform)
今天在leetcode上做题的时候,我在一个运行时间为O(N)的有向图上应用了dfs,但是我的代码给出了TLE,所以在尝试了太多次之后我查看了评论并且有一个接受的代码也在 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];
}
如果有人需要问题link:- https://leetcode.com/problems/time-needed-to-inform-all-employees/
在您的 dfs()
函数中,您按值传递 inform
,这意味着编译器会在您每次调用该函数时复制 inform
,而不是 inform
本身。
您应该改为通过引用传递。
void dfs(int head, int time, vector<int> &inform)