Employee Importance
来源:互联网 发布:ios 电商app源码 编辑:程序博客网 时间:2024/04/29 22:26
Employee Importance
- Employee Importance
- 题目
- 解决
- 原始想法
- 优化
题目
leetcode题目
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, []]], 1Output: 11Explanation: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.
解决
由于给的是Employee*
类型,所以我们需要判断Employee* employee->id == id
是否成立。
并且我们需要注意,a
的直系下属的直系下属同样是a
的下属,我们需要留意a
的直系下属是否还有自己的直系下属。
1. 原始想法
/*// Employee infoclass Employee {public: // It's the unique ID of each node. // unique id of this employee int id; // the importance value of this employee int importance; // the id of direct subordinates vector<int> subordinates;};*/class Solution {public: int getImportance(vector<Employee*> employees, int id) { int result = 0; // 将id和importance相互绑定 unordered_map<int, int> im; // 将id和subordinates相互绑定 unordered_map<int, vector<int>> su; int num = employees.size(); for (int i = 0; i < num; i++) { im[employees[i]->id] = employees[i]->importance; su[employees[i]->id] = employees[i]->subordinates; } queue<int> sid; // 使用队列记录所有下属的id sid.push(id); while (!sid.empty()) { int i = sid.front(); sid.pop(); // 将"id = i"的employee的直系下属添加到队列中 for (int k = 0; k < su[i].size(); k++) { sid.push(su[i][k]); } result += im[i]; } return result; }};
2. 优化
/*// Employee infoclass Employee {public: // It's the unique ID of each node. // unique id of this employee int id; // the importance value of this employee int importance; // the id of direct subordinates vector<int> subordinates;};*/class Solution {public: int getImportance(vector<Employee*> employees, int id) { int result = 0; unordered_map<int, Employee*> e; int num = employees.size(); for (int i = 0; i < num; i++) { e[employees[i]->id] = employees[i]; } queue<int> sid; sid.push(id); while (!sid.empty()) { int i = sid.front(); sid.pop(); result += e[i]->importance; for (vector<int>::iterator it = e[i]->subordinates.begin(); it != e[i]->subordinates.end(); it++) { sid.push(*it); } } return result; }};
- Employee Importance
- Employee Importance
- Employee Importance
- 690. Employee Importance
- [LeetCode] 690. Employee Importance
- 12.leetCode690. Employee Importance
- leetcode 690. Employee Importance
- 690 leetcode employee importance
- python--leetcode690. Employee Importance
- [LeetCode] 690. Employee Importance
- LeetCode # 690 Employee Importance
- 690-Employee Importance
- 690. Employee Importance
- 690. Employee Importance
- 690. Employee Importance
- 690. Employee Importance
- DFS:690. Employee Importance
- 690. Employee Importance
- Android 四大组件
- 欢迎使用CSDN-markdown编辑器
- android开发学习 -- 通过反射去获取类的属性
- 文章标题
- 从感知机开始
- Employee Importance
- 静态文件
- DOM树结构
- JSONObject put,accumulate,element的区别
- 【编译原理】windows8.1下安装配置flex,bison和gnu-gcc编译器
- java基础4:io流对象之File对象(下)
- ACM_ I'll play a trick on you
- servlet初始化参数
- Git的一些简单操作