员工的重要性

这个代码实现了一个算法,通过广度优先搜索(BFS)来计算员工的重要性和其下属的重要性。首先,将目标员工ID放入辅助队列,并初始化重要性为0。然后遍历员工列表,如果找到目标ID,将其重要性累加,并将下属ID加入队列。接着,从队列中取出ID,查找其下属并继续累加重要性。此过程不断重复,直到队列为空。最后返回总重要性。
摘要由CSDN通过智能技术生成

题目

在这里插入图片描述

解题思路(广度优先搜索)

  • 首先找到要计算重要性员工 的id,id 进辅助队列并记录其重要性,然后该员工下属的 id 进队列,该员工的 id 出队列,之后再找到下属的 id 并记录重要性,重复上述步棸,直至无下属。

Code

class Solution {
    public int getImportance(List<Employee> employees, int id) {
        int sum = 0;          // 存储所求员工重要性变量
		LinkedList<Integer> number = new LinkedList<Integer>();  // LinkedList 子类实现了 Queue(队列)接口,辅助队列变量
		number.offer(id);     // 将目标 id 添加到队列结尾,这里用的是队列操作,不是链表
		for(int i = 0; i < employees.size(); i++) {
			if(id == employees.get(i).id) {
				System.out.println(employees.get(i).importance);
				sum += employees.get(i).importance;
			
				// 目标 id 下属的 id 进队列
				if(employees.get(i).subordinates != null) {
					for(int j = 0; j < employees.get(i).subordinates.size(); j++) {
						number.offer(employees.get(i).subordinates.get(j));
					}
				}
				
				if(!number.isEmpty()) {
					number.poll();      // 找到并删除队头
				}
				if(!number.isEmpty()) {
					id = number.peek();  // 找到并但不删除队头
					i = -1;              // 每一个 id 都从第一个员工寻找
				}
			}
		}
	      
		return sum;    
    }
}

代码运行截图
在这里插入图片描述

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值