LeetCode 690. 员工的重要性

题目

在这里插入图片描述


思路

很容易想到的深度优先搜索,每次都先令 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


  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 1
    评论
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

jiachengren

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值