LeetCode690. 员工的重要性(BFS || DFS)

Posted 醉苼

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了LeetCode690. 员工的重要性(BFS || DFS)相关的知识,希望对你有一定的参考价值。

690. 员工的重要性(BFS || DFS)

链接:https://leetcode-cn.com/problems/employee-importance/solution/690-yuan-gong-de-zhong-yao-xing-bfs-dfs-zaf51/
解题思路
方法一:
DFS,遍历一遍集合,找到id等于给定id的Emlpoyee,然后递归查找下属的重要性

方法二:
BFS,先遍历一遍,用Map记录id和对应的下标,然后BFS查找下属

这里我一开始想成图了,还用Set来去重,后来发现不会有重复的

代码:
方法一:

    public int getImportance(List<Employee> employees, int id) {
		if(employees == null || employees.size() == 0) return 0;
		int sum = 0;
		for(Employee e : employees) {
			if(e.id == id) {
				sum += e.importance;
				for(int i : e.subordinates) {
					sum += getImportance(employees, i);
				}
			}
		}
		return sum;
	}

方法二:

/*
// 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) {
        Map<Integer, Integer> map = new HashMap<Integer, Integer>();
        for(int i = 0; i < employees.size(); i++) {
        	map.put(employees.get(i).id, i);
        }
        int sum = 0;
        Queue<Integer> queue = new LinkedList<Integer>();
        queue.add(id);
        while(!queue.isEmpty()) {
        	int size = queue.size();
        	for(int i = 0; i < size; i++) {
        		int index = queue.poll();
        		Employee e = employees.get(map.get(index));
        		for(int j : e.subordinates) {
        			
        				queue.add(j);
        			
        		}
        		sum += e.importance;
        	}
        }
        return sum;
    }
}

以上是关于LeetCode690. 员工的重要性(BFS || DFS)的主要内容,如果未能解决你的问题,请参考以下文章

JS Leetcode 690. 员工的重要性 题解分析

leetcode 690.员工的重要性

leetcode 690. 员工的重要性

[LeetCode]690. Employee Importance员工重要信息

LeetCode 690 员工的重要性[DFS Map] HERODING的LeetCode之路

员工的重要性(DFS和BFS)