You are given a data structure of employee information, which includes the employee's unique id, his importance value and his direct subordinates' id.
For example, employee 1 is the leader of employee 2, and employee 2 is the leader of employee 3. They have importance value 15, 10 and 5, respectively. Then employee 1 has a data structure like [1, 15, [2]], and employee 2 has [2, 10, [3]], and employee 3 has [3, 5, []]. Note that although employee 3 is also a subordinate of employee 1, the relationship is not direct.
Now given the employee information of a company, and an employee id, you need to return the total importance value of this employee and all his subordinates.
Example 1:
Input: [[1, 5, [2, 3]], [2, 3, []], [3, 3, []]], 1
Output: 11
Explanation:
Employee 1 has importance value 5, and he has two direct subordinates: employee 2 and employee 3. They both have importance value 3. So the total importance value of employee 1 is 5 + 3 + 3 = 11.
Note:
- One employee has at most one direct leader and may have several subordinates.
- The maximum number of employees won't exceed 2000.
这道题定义了一种员工类,有id,重要度,和direct report的员工,让我们求某个员工的总重要度。我们要明白的是就算某个员工不直接向你汇报工作,而是向你手下人汇报,这个人的重要度也会算进你的重要度中,想到了狗家的统计直接汇报个数系统就是这样的。这其实就是之前那道 Nested List Weight Sum 的变化形式,我们可以用DFS来做。首先我们想,为了快速的通过id来定位到员工类,需要建立一个id和员工类的映射,然后我们根据给定的员工id来算其重要度。计算方法当然是其本身的重要度加上其所有手下人的重要度,对于手下人,还要累加其手下人的重要度。需要注意的是,像这种类似有向图遍历的问题都需要用一个HashSet来记录访问过的结点,以免有环存在,从而陷入无限死循环。但是由于这道题的场景比较特殊,一个人是不可能给自己的下属汇报的,所以不会有环存在,我们也乐得省事。建立一个结果res变量,加上当前员工的重要度,然后遍历其所有手下,对其每个手下人调用递归函数加到res上,最后返回res即可,参见代码如下:
解法一:
class Solution {
public:
int getImportance(vector<Employee*> employees, int id) {
unordered_map<int, Employee*> m;
for (auto e : employees) m[e->id] = e;
return helper(id, m);
}
int helper(int id, unordered_map<int, Employee*>& m) {
int res = m[id]->importance;
for (int num : m[id]->subordinates) {
res += helper(num, m);
}
return res;
}
};
我们也可以用BFS来做,使用一个queue来辅助运算,开始将给定员工id放入,然后当queue不为空进行循环,每次取出队首员工,累加上当前员工的复杂度到结果res,然后将其所有手下人加入队列等待遍历,参见代码如下:
解法二:
class Solution {
public:
int getImportance(vector<Employee*> employees, int id) {
int res = ;
queue<int> q{{id}};
unordered_map<int, Employee*> m;
for (auto e : employees) m[e->id] = e;
while (!q.empty()) {
auto t = q.front(); q.pop();
res += m[t]->importance;
for (int num : m[t]->subordinates) {
q.push(num);
}
}
return res;
}
};
类似题目:
参考资料:
https://leetcode.com/problems/employee-importance/
https://leetcode.com/problems/employee-importance/discuss/112587/Java-HashMap-bfs-dfs
LeetCode All in One 题目讲解汇总(持续更新中...)
[LeetCode] Employee Importance 员工重要度的更多相关文章
-
[LeetCode]690. Employee Importance员工重要信息
哈希表存id和员工数据结构 递归获取信息 public int getImportance(List<Employee> employees, int id) { Map<Integ ...
-
LeetCode Employee Importance
原题链接在这里:https://leetcode.com/problems/employee-importance/description/ 题目: You are given a data stru ...
-
Leetcode690.Employee Importance员工的重要性
给定一个保存员工信息的数据结构,它包含了员工唯一的id,重要度 和 直系下属的id. 比如,员工1是员工2的领导,员工2是员工3的领导.他们相应的重要度为15, 10, 5.那么员工1的数据结构是[1 ...
-
690. Employee Importance员工权限重要性
[抄题]: You are given a data structure of employee information, which includes the employee's unique i ...
-
Leetcode之深度优先搜索(DFS)专题-690. 员工的重要性(Employee Importance)
Leetcode之深度优先搜索(DFS)专题-690. 员工的重要性(Employee Importance) 深度优先搜索的解题详细介绍,点击 给定一个保存员工信息的数据结构,它包含了员工唯一的id ...
-
(BFS) leetcode 690. Employee Importance
690. Employee Importance Easy 377369FavoriteShare You are given a data structure of employee informa ...
-
LN : leetcode 690 Employee Importance
lc 690 Employee Importance 690 Employee Importance You are given a data structure of employee inform ...
-
【Leetcode_easy】690. Employee Importance
problem 690. Employee Importance 题意:所有下属和自己的重要度之和,所有下属包括下属的下属即直接下属和间接下属. solution:DFS; /* // Employe ...
-
[Java]LeetCode690. 员工的重要性 | Employee Importance
You are given a data structure of employee information, which includes the employee's unique id, his ...
随机推荐
-
apache 反向代理配置
配置前资料检查: 1.可以使用的apache 安装apache服务:打开cmd , 在apache的bin目录下执行以下命令 httpd -k install -n apache2.2 其中&q ...
-
作业三(代码规范、代码复审、PSP)
1.代码规范: 我支持代码要有规范,理由如下. (1).艺术是一个很带有个人风格的学科,天马行空才能凸显出自己的价值.但不要忘了,会艺术的不是生下来就会艺术, 他也需要按照前辈的步骤一步一步的学习基础 ...
-
向github提交代码
Quick setup — if you've done this kind of thing before https://github.com/KoMiles/emlog.git Create a ...
-
利用DetachedCriteria实现模糊查询和分页
分类: Java-Developing 前段时间在做模糊查询,并利用数据库分页,DAO用hibernate实现,刚开始的时候 根据业务层的数据,拼hql语句进行查询,且不说要进行一些if判断,单 ...
-
Hibernate 拥有 Mybits 的SQL/HQL特性 (注解、XML两不误)
第一次写博客.文章有点渣,喜欢就看看,不喜欢路过点个赞. 效果:直接一条语句多种用法 FROM User A WHERE 1=1 <#if id??&g ...
-
How to Read, Write XLSX File in Java - Apach POI Example---reference
No matter how Microsoft is doing in comparison with Google, Microsoft Office is still the most used ...
-
Nginx——事件驱动机制(雷霆追风问题,负载均衡)
事件处理框架 所有的worker进程都在ngx_worker_process_cycle方法中循环处理事件,处理分发事件则在ngx_worker_process_cycle方法中调用ngx_proce ...
-
python机器学习模块安装
环境:RHEL6.5 离线安装 ############################################################################ 一,本地yum ...
-
Codeforces 797A - k-Factorization
A. k-Factorization 题目链接:http://codeforces.com/problemset/problem/797/A time limit per test 2 seconds ...
-
Codeforces Round #397 by Kaspersky Lab and Barcelona Bootcamp (Div. 1 + Div. 2 combined) F. Souvenirs 线段树套set
F. Souvenirs 题目连接: http://codeforces.com/contest/765/problem/F Description Artsem is on vacation and ...