「这是我参与2022首次更文挑战的第40天,活动详情查看:2022首次更文挑战」
690. 员工的重要性
给定一个保存员工信息的数据结构,它包含了员工 唯一的 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 。
提示:
- 一个员工最多有一个 直系 领导,但是可以有多个 直系 下属
- 员工数量不超过 2000 。
递归
思路
跟据题目可知,给定我们一个公司员工的数组信息,其中包含着员工的id已经去那种importance,以及下属subordinates,让我们求指定id的员工以及其下属员工(包含下属的下属的员工),所有权重的总和
奇怪的是题目中并没有给定我们这些key,只是给了数组格式的测试用例,具体数据格式如下:
[
{ id: 1, importance: 5, subordinates: [ 2, 3 ] },
{ id: 2, importance: 3, subordinates: [ 4 ] },
{ id: 3, importance: 4, subordinates: [] },
{ id: 4, importance: 1, subordinates: [] }
]
因为涉及到不断查找不同id的员工,这里我们先用Map结果吧所有的员工以id,以及id对应的公司员工对象信息保存起来
然后声明函数checkImportance函数,参数为一个id
在map中找到对应员工将其importance加在total中
然后找到其下属员工
遍历下属员工,获取每个员工的id,递归调用checkImportance
最后直接返回total即可
var GetImportance = function (employees, id) {
var map = new Map()
for (var i = 0; i < employees.length; i++) {
var item = employees[i]
map.set(item.id, item)
}
var total = 0
function checkImportance(id) {
// 当前id人
var targetItem = map.get(id)
// 下属数组
var staff = targetItem.subordinates
// 当前人权重统计
total += targetItem.importance
// 员工遍历
for (var i = 0; i < staff.length; i++) {
var staffId = staff[i]
checkImportance(staffId)
}
}
checkImportance(id)
return total
};
谢谢大家,一起加油