力扣690题:员工重要度解决方案
一、问题理解
题目要求我们计算一个员工及其所有下属(包括下属的下属)的重要度总和。这是一个典型的树形结构遍历问题,可以使用深度优先搜索(DFS)或广度优先搜索(BFS)来解决。
二、数据结构分析
每个员工对象包含三个属性:
id: 唯一标识符
importance: 该员工的重要度值
subordinates: 直接下属的ID列表
三、解决思路
广度优先搜索(BFS):
累加其重要度
将其所有下属加入队列
从给定的员工id开始
将其加入队列
循环处理队列中的每个员工:
直到队列为空,返回累计的重要度
四、完整代码
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; } };
五、代码详解
哈希表构建:
unordered_map<int, Employee*> emp_map
存储所有员工信息队列初始化:
queue<int> q
用于BFS遍历BFS循环:
q.front()
获取当前处理的员工idemp_map[current_id]
获取员工对象total_importance += current_emp->importance
累加重要度将下属id加入队列继续处理
返回结果:当队列为空时,
total_importance
即为所求
六、示例分析
假设输入:
employees = [[1,5,[2,3]],[2,3,[]],[3,3,[]]]
id = 1
执行过程:
处理id=1,重要度+5,下属2,3入队
处理id=2,重要度+3,无下属
处理id=3,重要度+3,无下属
队列空,返回5+3+3=11
原创内容 转载请注明出处