编程语言
首页 > 编程语言> > LeetCode——690 员工的重要性(JAVA)

LeetCode——690 员工的重要性(JAVA)

作者:互联网

给定一个保存员工信息的数据结构,它包含了员工 唯一的 id重要度直系下属的 id

比如,员工 1 是员工 2 的领导,员工 2 是员工 3 的领导。他们相应的重要度为 15 , 10 , 5 。那么员工 1 的数据结构是 [1, 15, [2]],员工 2的 数据结构是 [2, 10, [3]],员工 3 的数据结构是 [3, 5, []]。注意虽然员工 3 也是员工 1 的一个下属,但是由于 并不是直系 下属,因此没有体现在员工 1 的数据结构中。

现在输入一个公司的所有员工信息,以及单个员工 id,返回这个员工和他所有下属的重要度之和。

示例:

输入:[[1, 5, [2, 3]], [2, 3, []], [3, 3, []]], 1
输出:11
解释:
员工 1 自身的重要度是 5 ,他有两个直系下属 2 和 3 ,而且 2 和 3 的重要度均为 3 。因此员工 1 的总重要度是 5 + 3 + 3 = 11 。

提示:

思路

本题的结构是一个普通树,但是比较坑的一点是题目定义的Employee结点,它的孩子是以id形式存储的,如果是以List<Employee>存储的话,在DFS中搜索孩子结点会方便很多。因为是以id形式存储,并不能直接通过id得到员工本人,所以我这里先用一个HashMap遍历一遍输入的List<Employee> employees集合,来建立一个id->员工的映射,这样在DFS中搜索孩子结点时,只需要get(id)即可。

然后就是DFS搜索要注意的地方:
因为题目不一定是从根结点开始搜索,所以要先找到所输入id的那个员工,然后以它为根结点,遍历它的所有子树。至于重要度什么时候加,我认为在DFS结束之后加比较合适,否则如果在一个叶子结点就加一起,很容易会引起重复的相加。

另外,这里存储路径的path在每次DFS退出的时候,不需要删除最后一个结点,这样的话,整个DFS结束之后,path里存储的就是所有结点(包括根结点和它的所有子结点)。所以,在整个DFS结束之后,再遍历所有结点,将它们的重要度依次相加即可。

代码

public class Solution {
	class Employee {//实际提交时可以不写类定义
		//LeetCode自带
	    public int id;
	    public int importance;
	    public List<Integer> subordinates;
	};
	ArrayList<Employee> path = new ArrayList<Employee>();
	HashMap<Integer, Employee> info = new HashMap<Integer, Employee>();//建立id->员工的映射
	int sum = 0;
	public void dfs(HashMap<Integer, Employee> info, Employee e) {
		path.add(e);
		if(e.subordinates.size()==0) {//如果没孩子
			return;
		}
		else {
			for(int i=0;i<e.subordinates.size();i++) {
				Employee nextEmployee = new Employee();
				nextEmployee = info.get(e.subordinates.get(i));
				dfs(info, nextEmployee);
			}
		}
	}
	public int getImportance(List<Employee> employees, int id) {
		Employee query = new Employee();
		for(int i=0;i<employees.size();i++) {
			info.put(employees.get(i).id, employees.get(i));
			if(employees.get(i).id==id) query = employees.get(i);
		}
		dfs(info, query);
		for(int i=0;i<path.size();i++) {
			sum += path.get(i).importance;
		}
		return sum;
	}
}

标签:结点,JAVA,get,int,690,员工,Employee,id,LeetCode
来源: https://blog.csdn.net/weixin_42257812/article/details/116330422