题目描述:
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.
class Employee {
// It's the unique id of each node;
// unique id of this employee
public int id;
// the importance value of this employee
public int importance;
// the id of direct subordinates
public List<Integer> subordinates;
}
思路一:
class Solution {
public int getImportance(List<Employee> employees, int id) {
int total = 0;
HashMap<Integer, Employee> map = new HashMap<>();
Queue<Employee> queue = new LinkedList<>();
for (Employee employee : employees)
map.put(employee.id, employee);
queue.add(map.get(id));
while (!queue.isEmpty())
{
Employee curr = queue.poll();
total += curr.importance;
for (int subid : curr.subordinates)
queue.add(map.get(subid));
}
return total;
}
}
思路二:
class Solution {
public int getImportance(List<Employee> employees, int id) {
int total = 0;
List<Integer> subids = new ArrayList<>();
for (Employee employee : employees)
{
if (employee.id == id)
{
total += employee.importance;
subids = employee.subordinates;
break;
}
}
if (subids.size() == 0) return total;
for (int subid : subids)
total += getImportance(employees, subid);
return total;
}
}