0
点赞
收藏
分享

微信扫一扫

leetcode690.员工的重要性C++

Go_Viola 2022-02-13 阅读 54

链接:

https://leetcode-cn.com/problems/employee-importance/

描述:

在这里插入图片描述

示例和提示:

在这里插入图片描述

代码:

深度优先搜索遍历

找到主id然后遍历员工
遍历员工时,深入遍历这个员工,将这个员工所有importance找完然后找下一个员工

/*
// Definition for Employee.
class Employee {
public:
    int id;
    int importance;
    vector<int> subordinates;
};
*/

class Solution {
public:
    int DFS(unordered_map<int,Employee*>& info,int id)
    {
        int cur = info[id]->importance;
        for(const auto& sid : info[id]->subordinates)
        {
            cur+=DFS(info,sid);
        }
        return cur;
    }


    int getImportance(vector<Employee*> employees, int id) {
        if(employees.empty())
            return 0;
        unordered_map<int,Employee*> info;
        for(const auto& e:employees)
        {
            info[e->id] = e;
        }    
        return DFS(info,id);
    }
};

广度优先搜索

运用队列的技术,将最开始的id先进队列
然后将这个id包含的所有id进队列
取出一个id就将这个id所包含的所有id入队列
类似:层序遍历

class Solution {
public:
    int getImportance(vector<Employee*> employees, int id) {
        unordered_map<int, Employee*> mp;
        for (auto& employee : employees) {
            mp[employee->id] = employee;
        }

        int total = 0;
        queue<int> que;
        que.push(id);
        while (!que.empty()) {
            int curId = que.front();
            que.pop();
            Employee* employee = mp[curId];
            total += employee->importance;
            for (int subId : employee->subordinates) {
                que.push(subId);
            }
        }
        return total;
    }
};

举报

相关推荐

0 条评论