1376. Time Needed to Inform All Employees

这道题很神奇,有些case输入,concele出不来结果,但是目前这个思路肯定是对的,33/39,但是依旧超时了,很尴尬。本质上就是一个深度优先遍历。不知道咋加速呢。。。

class Solution {
public:
    //总共有n个人,id从0-(n-1); headID就是起始迭代位置。
    // manager: 每个员工的老板,manager[headID] = -1
    // 从headID开始,层层通知一个新闻,
    // informTime:第i个人需要这么长时间去通知下一个人
    // 返回值,通知完每个人需要多少时间呢?
    // 就是树的深度优先遍历-DFS
    int numOfMinutes(int n, int headID, vector<int>& manager, vector<int>& informTime) {
        
        int maxtime = 0;
        int flag = 0;
        for(int i=0;i<manager.size();i++){
            if (headID==manager[i]){
                maxtime = max(maxtime, numOfMinutes(n, i, manager, informTime));
                flag = 1;
            }
        }
        if (flag == 1){
            maxtime += informTime[headID];
        }
        return maxtime;
    }
};

终于ac了,果然dfs是最快的,但是处理的时候,我直接把vector managers转成map,使得最后查找的时候更快了,就直接ac了。

class Solution {
public:
    //总共有n个人,id从0-(n-1); headID就是起始迭代位置。
    // manager: 每个员工的老板,manager[headID] = -1
    // 从headID开始,层层通知一个新闻,
    // informTime:第i个人需要这么长时间去通知下一个人
    // 返回值,通知完每个人需要多少时间呢?
    // 就是树的深度优先遍历-DFS
    
    int dfs(int headID, map<int, vector<int>>& manager2id, vector<int>& informTime){
        int maxtime = 0;
        int flag = 0;
        vector<int> subids = manager2id[headID];
        for(int i=0;i<subids.size();i++){
            if (subids[i]!=-1){
                maxtime = max(maxtime, dfs(subids[i], manager2id, informTime));
                flag = 1;
            }
        }
        if (flag == 1){
            maxtime += informTime[headID];
        }
        return maxtime;
    }
    
    
    int numOfMinutes(int n, int headID, vector<int>& manager, vector<int>& informTime) {
        // convert manager to map for quick searach
        map<int, vector<int>> manager2id;
        for(int i=0;i<manager.size();i++){
            int key = manager[i];
            int val = i;
            if (manager2id.find(key) == manager2id.end()){
                vector<int> temp(1, val);
                manager2id[key] = temp;
            }
            else{
                manager2id[key].push_back(val);   
            }
        }
        
        int maxtime = dfs(headID, manager2id, informTime);
        return maxtime;
    }
};
发布了425 篇原创文章 · 获赞 18 · 访问量 15万+

猜你喜欢

转载自blog.csdn.net/zeroQiaoba/article/details/104752356
ALL