当前位置:首页 > 力扣 > 力扣690题:哈希表+BFS解决员工的重要性

力扣690题:哈希表+BFS解决员工的重要性

3天前

力扣690题:哈希表+BFS解决员工的重要性 力扣题解 哈希表 广度优先搜索 广搜 BFS 队列 第1张

一、题目解读

LeetCode第690题“员工的重要性”要求给定一个员工信息数组(包含id、重要性值及下属id列表),计算指定id员工及其所有下属的总重要性。题目核心在于处理状结构数据,需遍历员工关系并累加重要性,同时考虑高效查找与遍历策略。

二、解题思路

采用“哈希表预处理+BFS遍历”的双层优化:

1. 哈希表映射:将员工信息存储于unordered_map,通过id直接O(1)查找员工对象,避免线性遍历。

2. 广度优先搜索(BFS):从目标员工开始,逐层遍历其下属,累加重要性值,确保不遗漏任何层级。

该解法兼具时间效率(O(n))与代码简洁性,适用于树状数据的广度优先处理场景。

三、解题步骤

1. 创建哈希表:遍历员工数组,将每个员工的id映射至其对象,构建emp_map。

2. 初始化队列:将目标id加入队列q,作为BFS起点。

3. BFS循环:

    弹出队首元素current_id,获取对应员工对象。

    累加其重要性至total_importance。

    将其所有下属id加入队列,扩展遍历范围。

4. 终止条件:队列为空时,所有员工已遍历完毕。

5. 返回结果:total_importance为最终总重要性。

四、代码与注释

class Solution {
public:
    int getImportance(vector<Employee*> employees, int id) {
        // 创建哈希表快速查找员工
        unordered_map<int, Employee*> emp_map;
        for (auto emp : employees) {
            emp_map[emp->id] = emp;
        }
        
        // 使用队列进行广度优先搜索(BFS)
        queue<int> q;
        q.push(id);
        int total_importance = 0;
        
        while (!q.empty()) {
            int current_id = q.front();
            q.pop();
            
            // 获取当前员工对象
            Employee* current_emp = emp_map[current_id];
            // 累加重要度
            total_importance += current_emp->importance;
            
            // 将下属加入队列
            for (int sub_id : current_emp->subordinates) {
                q.push(sub_id);
            }
        }
        
        return total_importance;
    }
};


五、总结

该解法巧妙结合哈希表的快速查找与BFS的广度遍历,将树状数据处理转化为线性操作,显著优化时间复杂度。核心启示:对于涉及多层关系的数据结构,预先构建索引(如哈希表)并采用广度优先策略,可大幅提升算法效率。对解决树/类算法问题具有通用参考价值。



原创内容 转载请注明出处

分享给朋友:

相关文章

洛谷4554题解:BFS算法优化最短路径求解(附代码详解)

洛谷4554题解:BFS算法优化最短路径求解(附代码详解)

一、题目解读洛谷4554题要求在一个n×m的网格中,计算从点(x1,y1)到点(x2,y2)的最短路径距离。路径上的每个格子包含字符,若相邻格子字符不同,则需要额外步数。题目核心在于处理字符差异对路径...

2025年GESP七级等价消除(洛谷P11965)代码解析与优化策略

2025年GESP七级等价消除(洛谷P11965)代码解析与优化策略

一、题目解读    2025年GESP七级考试中的“等价消除(洛谷P11965)”问题要求统计给定字符串中满足等价条件的子串数量。所谓“等价子串”,是指子串中所...

【洛谷1184题解析】用C++高效解决地点匹配问题(附代码与解题思路)

【洛谷1184题解析】用C++高效解决地点匹配问题(附代码与解题思路)

一、题目解读洛谷1184题要求处理一组地点列表与行程记录,统计其中匹配的天数。题目难点在于高效处理带有空格的字符串输入,以及快速判断每日行程是否在高手可去地点集合中。需要兼顾输入格式解析与算法效率。二...

【力扣2846题】图论+二进制提升:高效解决连通性问题(附C++代码)

【力扣2846题】图论+二进制提升:高效解决连通性问题(附C++代码)

一、题目解读力扣2846题要求解决一个基于图连通性的操作优化问题。给定一个无向图,包含边权重,以及一系列查询,每个查询询问两点间路径的最小操作次数。题目关键在于高效计算路径上权重分布的统计信息,并转化...

力扣面试题02.05链表相加:虚拟头节点+迭代解法的详细解析

力扣面试题02.05链表相加:虚拟头节点+迭代解法的详细解析

一、题目解读力扣面试题02.05要求将两个链表表示的整数相加,每个节点存储一位数字(逆序),结果同样以链表形式返回。例如,链表1为7→2→4,链表2为5→6→3,相加结果应为2→9→8→7。题目难点在...

洛谷P3694题解:动态规划与状态压缩优化解题全解析

洛谷P3694题解:动态规划与状态压缩优化解题全解析

一、题目解读洛谷P3694题要求解决一个多团队人数分配问题,给定n个元素和m个团队,每个元素属于一个团队,需将元素重新排列,使相邻元素属于不同团队,并最小化调整次数。题目难点在于如何高效处理团队间的空...

发表评论

访客

看不清,换一张

◎欢迎参与讨论,请在这里发表您的看法和观点。