算法

690. 员工的重要性

2021-05-03  本文已影响0人  秃头哥编程

2021-05-01 LeetCode 每日一题

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

这里可以使用BFS/DFS去解题。因为我递归用的不怎么熟悉,所以选择用递推的方式。

因为题目提供的是员工的id,而我们需要计算员工的重要性,所以基本思路就是,先通过id拿到Employee,加入队列尾,每次循环,从队列头开始拿,直到队列为空,一次循环其实就相当于把某个员工的直接下属员工全部遍历了一遍。然后拿到该员工的直接下属员工,再加入队列尾。直到退出while循环即可。

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

class Solution {
    public int getImportance(List<Employee> employees, int id) {
        int res = 0;
        Queue<Employee> queue = new LinkedList<>();
        queue.offer(getEmployee(employees, id));

        while (!queue.isEmpty()) {
            int len = queue.size();
            for (int i = 0; i < len; i++) {
                Employee employee = queue.poll();
                res += employee.importance;

                for (Integer childId : employee.subordinates) {
                    queue.offer(getEmployee(employees, childId));
                }
            }
        }

        return res;
    }

    private Employee getEmployee(List<Employee> employees, int id) {
        for (Employee e : employees) {
            if (e.id == id) {
               return e;
            }
        }

        return null;
    }
}
image.png
上一篇下一篇

猜你喜欢

热点阅读