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)的主要内容,如果未能解决你的问题,请参考以下文章
[LeetCode]690. Employee Importance员工重要信息