文章目录
题目
思路
很容易想到的深度优先搜索,每次都先令 cnt 等于编号为当前 id 的 Employee 的 importance , 然后对当前对象所存储的下直系下属进行递归调用本函数,最后返回累加的 cnt 值即可。
代码实现(Java)
/*
// Definition for Employee.
class Employee {
public int id;
public int importance;
public List<Integer> subordinates;
};
*/
class Solution {
HashMap<Integer,Employee> map;
public int getImportance(List<Employee> employees, int id) {
if(employees == null)
return 0;
if(map == null){
map = new HashMap<Integer,Employee>();
for(int i = 0; i<employees.size(); i++) {
map.put(employees.get(i).id,employees.get(i));
}
}
Employee employee = map.get(id);
int cnt = employee.importance;
List<Integer> subordinates = employee.subordinates;
if(subordinates == null)
return cnt;
for(int i = 0; i<subordinates.size(); i++) {
cnt += getImportance(employees,subordinates.get(i));
}
return cnt;
}
}
踩坑
我看题目的样例,以为 id 就是对应着 employees 的下标值+1, 所以我刚开始写成直接得到当前对象的错误代码为: Employee employee = employees.get(id-1), 这样子会报越界错误。于是我想到每次都遍历一遍 employees ,找到 employees 中 id 等于当前 id 的对象,但是这样子复杂度太高,于是想到用空间换时间,用 HashMap 来保存 id 与 employee 的映射关系,每次从 HashMap中取对象即可。上面的代码有点懒汉式单例的写法。
坚持分享,坚持原创,喜欢博主的靓仔靓女们可以看看博主的首页博客!
您的点赞与收藏是我分享博客的最大赞赏!
博主博客地址: https://blog.csdn.net/weixin_43967679