[LeetCode] Employee Importance 员工重要度

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:

    1. One employee has at most one direct leader and may have several subordinates.
    2. The maximum number of employees won't exceed 2000.

这道题定义了一种员工类,有id,重要度,和direct report的员工,让我们求某个员工的总重要度。我们要明白的是就算某个员工不直接向你汇报工作,而是向你手下人汇报,这个人的重要度也会算进你的重要度中。这其实就是之前那道Nested List Weight Sum的变化形式,我们可以用DFS来做。首先我们想,为了快速的通过id来定位到员工类,需要建立一个id和员工类的映射,然后我们根据给定的员工id来算其重要度。计算方法当然是其本身的重要度加上其所有手下人的重要度,对于手下人,还要累加其手下人的重要度,为了不重复计算某个员工的重要度,我们建立一个集合,将遍历过的员工id放到集合中,这样一旦我们遍历到集合中有的员工,直接返回0即可;否则就将该员工id加入集合中,然后建立一个结果res变量,加上当前员工的重要度,然后遍历其所有手下,对其每个手下人调用递归函数加到res上,最后返回res即可,参见代码如下:

解法一:

class Solution {

public:
    int getImportance(vector<Employee*> employees, int id) {
        unordered_set<int> s;
        unordered_map<int, Employee*> m;
        for (auto e : employees) m[e->id] = e;
        return helper(id, m, s);
    }
    int helper(int id, unordered_map<int, Employee*>& m, unordered_set<int>& s) {
        if (s.count(id)) return 0;
        s.insert(id);
        int res = m[id]->importance;
        for (int num : m[id]->subordinates) {
            res += helper(num, m, s);
        }
        return res;
    }
};

我们也可以用BFS来做,使用一个queue来辅助运算,开始将给定员工id放入,然后当queue不为空进行循环,每次取出队首员工,如果已经访问过了,直接跳过,否则加入集合中,然后累加上当前员工的复杂度到结果res,然后将其所有手下人加入队列等待遍历,参见代码如下:

解法二:

class Solution {

public:
    int getImportance(vector<Employee*> employees, int id) {
        int res = 0;
        queue<int> q{{id}};
        unordered_set<int> s;
        unordered_map<int, Employee*> m;
        for (auto e : employees) m[e->id] = e;
        while (!q.empty()) {
            auto t = q.front(); q.pop();
            if (s.count(t)) continue;
            s.insert(t);
            res += m[t]->importance;
            for (int num : m[t]->subordinates) {
                q.push(num);
            }
        }
        return res;
    }
}; 

本文转自博客园Grandyang的博客,原文链接:[LeetCode] Employee Importance 员工重要度

,如需转载请自行联系原博主。

时间: 2024-08-01 15:31:49

[LeetCode] Employee Importance 员工重要度的相关文章

报告显示:优化移动办公环境可量化提升员工参与度和企业业绩

由经济学人智库 (EIU) 开展.惠普旗下子公司Aruba赞助的名为<移动.业绩与参与度>的最新全球研究表明,注重"移动优先"体验的办公环境与提升员工参与度之间存在可量化的关联.这一发现有效证实了企业CIO (首席信息官)有机会通过制订和执行良好的移动战略来提升公司绩效. 在参与调查的员工中,把雇主称为移动"先锋"的人对自己的参与度和绩效的评分相较评价自己雇主移动运用"很差"的人,在每一项指标上都要高得多:工作效率高16%,创造性高1

大数据如何可以推动员工敬业度

想象一下,如果您企业的人力资源部门不仅可以使用数据来预测员工的敬业度,还能够知道员工什么时候可能会跳槽?而这就是HighGround公司的 创始人兼首席执行官Vip Sandhir想要通过该公司最新员工敬业度产品所实现的目标.通过创建能够直接从员工中挖掘数据的系统,目标是能够为企业业务领导提供对于企业内部的弱 点和优势的更好的.持续的洞察. 使用大数据进 行绩效评估,让企业能够掌握实时数据,而不仅仅只是进行年度回顾.通过这种方式,可以更容易地获得对于员工在工作中所获得的工作成就感和快乐参与度的想

韬睿惠悦:中国员工敬业度低于美国

本报讯 (记者张艳)昨天,全球咨询服务公司韬睿惠悦发布的2011年中国员工敬业度调研结果显示,中国员工敬业度得分在78%,低于美国市场的(81%)及全球高绩效企业的(85%).韬睿惠悦方面分析称,关注员工的职业发展和注重企业目标与员工绩效的联结等,是中国企业提升员工敬业度的最关键的驱动因素. 据悉,这一调查涉及中国的部分有50万名员工参与.韬睿惠悦组织效能及调研咨询中国区总经理林杰文介绍,从调研结果看,中国员工敬业度在认知.情感和行动三方面都略低于美国市场及全球高绩效企业. 调查显示,相比全球高

提高员工敬业度的战略选择—安身立命

08年6月,韬睿咨询公司(一家全球性的专业服务公司)最新的全球人力资源管理调研结果显示:只有8%的中国员工被认为具有高敬业度,并且愿意为所在企业做出更多的贡献:25%的员工被认为敬业度很低,而且这组人中的60%打算留在所任的企业里.这里的调研权威性暂时不去考虑,至少能说明企业(中国也好外国也好)员工敬业度是个大问题,那么该如何提高员工的敬业度呢?我认为做到四个字就够了,那就是安身立命.安身就是让员工在企业能够得到应该得到的:立命就是员工愿意为此持续奋斗.这应当成为企业提高员工敬业度的战略选择.第

用文化提高员工敬业度

如果要评选影响员工敬业度的最神秘杠杆,文化定能获得头奖.要拉动其他杠杆很容易:管理者不合格?把最差劲的解雇,然后培养和奖励其他管理者的敬业行为.品牌建设脱节?让营销部门领导一场由内而外的品牌运动,调动员工的积极性.可文化却是一种难以名状.虚无缥缈的软性因素.然而,在你能掌控的敬业度工具中,文化也许是最具威力的.只要做好了文化,它就能帮你提高员工敬业度,支撑你度过顺境和逆境.文化就像空气一样,能接触到所有的员工.它既不是专为一小群精英管理者打造的敬业度计划,也不是推高调查分数的职场津贴,每逢艰难时

[LeetCode] Sentence Similarity 句子相似度

Given two sentences words1, words2 (each represented as an array of strings), and a list of similar word pairs pairs, determine if two sentences are similar. For example, "great acting skills" and "fine drama talent" are similar, if th

提升员工敬业度的激励管理

随着改革的日益深入,企业传统管理多年积累和隐含的矛盾日益显现出来.企业改革后出现的员工群体上访.集聚事件的影响,员工队伍中也出现了许多不稳定因素和苗头.面对改革后带来的企业内部个体和群体观念的变化.利益格局的调整,以及市场经济条件下人的价值取向多元化给队伍管理带来了许多不利影响,主要表现为:思想观念更趋多元化,趋利意识更加显性化,队伍布局更趋分散化,工作运行要求制度化,热点难点问题更趋多样化.不少老职工体现了明显的岗位疲劳,学技积极性和敬业度不高,敬业精神缺失比较严重. 一.影响职工敬业度的因素

是谁扼杀了员工的敬业度?

引子 桃子是某报社的记者,入行三年就凭借着自己出众的工做作能力和勤奋的工作态度在单位颇得领导和同事的赞赏.可最近她却有些郁闷,原因是由于报社内部晋升首席记者,呼声.人气极高的桃子意外落选了.原本争强好胜的桃子满心欢喜的作好了迎接新挑战的准备,这下可蔫了.桃子落选的原由很简单,因为报社领导觉得桃子虽然完全具备了做首记的能力,但在记者队伍里面她是最年轻的,选她做首席恐怕难服众心,所以就"照顾"了一下老记者.尽管领导说了很多诸如"你还年轻,机会多的是!"的话,可桃子越琢磨

LeetCode All in One 题目讲解汇总(持续更新中...)

终于将LeetCode的免费题刷完了,真是漫长的第一遍啊,估计很多题都忘的差不多了,这次开个题目汇总贴,并附上每道题目的解题连接,方便之后查阅吧~ 如果各位看官们,大神们发现了任何错误,或是代码无法通过OJ,或是有更好的解法,或是有任何疑问,意见和建议的话,请一定要在对应的帖子下面评论区留言告知博主啊,多谢多谢,祝大家刷得愉快,刷得精彩,刷出美好未来- 博主制作了一款iOS的应用"Leetcode Meet Me",里面有Leetcode上所有的题目,并且贴上了博主的解法,随时随地都能