【问题标题】:Why my code is giving Time Limit Exceeded?为什么我的代码超出了时间限制?
【发布时间】: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


【解决方案1】:

在您的dfs() 函数中,您按值传递inform,这意味着每次调用该函数时编译器都会复制inform,而不是inform 本身。

您应该改为通过引用传递。

void dfs(int head, int time, vector<int> &inform)

【讨论】:

  • 谢谢解答,确实有效,没想到传值和传引用有这么大的时间复杂度差距。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2018-08-23
  • 1970-01-01
  • 1970-01-01
  • 2021-09-30
  • 1970-01-01
  • 2022-01-25
  • 1970-01-01
相关资源
最近更新 更多