版权声明:本文为博主原创文章,如需转载,请注明出处。 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;
}