LeetCode 690. Employee Importance题解

版权声明:本文为博主原创文章,如需转载,请注明出处。 https://blog.csdn.net/BlueBlueSkyZ/article/details/80670536

题目

题目链接
题目会会给出一系列的员工信息,包括员工id、员工重要度及其直接下属。我们将输入一个员工的id,然后得到他以及他所有下属的重要程度之和。这里需注意是所有下属,所以还需要找到下属的下属。

思路

这道题是一道bfs(广度优先遍历)的题目。

  • 我们的目标首先是找到这个员工,这个用一个遍历就完成了。
  • 然后,将其重要程度加入累加器中,然后进行查找其所有下属,并将下属们的重要度加入累加器。
  • 继续查找下属的下属,直到没有下属没有下属为止。

整个题目其实比较简单,就是给的下属列表中给的是下属的id,所以我们还需要用id进行查找,如果直接给对象简直就是轻松愉快啊。。

代码实现(Java)

bfs很显然就要利用一下队列这个数据结构了,整体的思路相对来说还是很清晰的。

public int getImportance(List<Employee> employees, int id) {

        int targetedEm = 0;
        int importance = 0;
        for (Employee employee : employees) {
            if(employee.id == id) {
                targetedEm = employee.id;

            }
        }

        Queue<Integer> queue = new LinkedList<Integer>();
        queue.add(targetedEm);
        while(!queue.isEmpty()) {
            int now = (int) queue.poll();
            Employee nowEm = new Employee();
            for(Employee employee : employees) {
                if(employee.id == now) {
                    nowEm = employee;   
                    importance += nowEm.importance;
                }
            }
            if( !nowEm.subordinates.isEmpty() ) {
                for(Integer subordinate : nowEm.subordinates) {
                    queue.add(subordinate);
                }
            }
        }

        return importance;
    }

猜你喜欢

转载自blog.csdn.net/BlueBlueSkyZ/article/details/80670536