Leetcode--690员工的重要性

在这里插入图片描述

代码+解题思路

//迭代法
//因为每个人可能有下属员工,所以先把整个列表结构存入map中,然后对存在下属的情况进行迭代操作
class Solution {
    Map<Integer,Employee> map = new HashMap<>();
    public int getImportance(List<Employee> employees, int id) {
        int n = employees.size();
        for(int i=0;i<n;i++)
            map.put(employees.get(i).id,employees.get(i));//将列表中的数据依次按照(id,所有数据)进行存储
        
        return getVal(id);
    }
    public int getVal(int id)
    {
        Employee manner = map.get(id);//根据id获取完整的信息
        int result = manner.importance;//获取当前id自己的重要性值
        for(int i : manner.subordinates)//对其下属的信息进行遍历,因为下属信息存在subordinate列表中,所以使用for-each进行读取
        {
            Employee e = map.get(i);
            result += e.importance;
            for(int j:e.subordinates)//如果该下属也有下属,则进行迭代
                result += getVal(j);
        }
        return result;
    }
}


//借助栈实现
class Solution {
    public int getImportance(List<Employee> employees, int id) {
        Map<Integer,Employee> map = new HashMap<>();
        int n = employees.size();

        for(int i=0;i<n;i++)
            map.put(employees.get(i).id, employees.get(i));
        
        int result = 0;//存储结果值
        Deque<Employee> d = new LinkedList<>();//使用栈结构辅助存储
        d.addLast(map.get(id));//先存储给定id对应的数据
        while(!d.isEmpty())//反复遍历,直至不存在下属为止
        {
            Employee e = d.pollFirst();//获取当前的员工信息
            result += e.importance;//结果值加上当前员工的import值
            for(int i:e.subordinates)//把当前员工对应的下属信息依次入栈
                d.addLast(map.get(i));
        } 
        return result;
    }
}
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值