其他分享
首页 > 其他分享> > Leetcode--690员工的重要性

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;
    }
}

标签:map,690,get,--,下属,id,int,result,Leetcode
来源: https://blog.csdn.net/weixin_41963310/article/details/116329319