/*
// Definition for Employee.
class Employee {
public:
int id;
int importance;
vector<int> subordinates;
};
*/
class Solution {
public:
int getImportance(vector<Employee *> &employees, int id) {
unordered_map<int, Employee *> idToEmployee;
for (int i = 0; i < employees.size(); ++i) {
idToEmployee[employees[i]->id] = employees[i];
}
return dfs(employees, idToEmployee, id);
}
private:
int dfs(vector<Employee *> &employees, unordered_map<int, Employee *> &idToEmployee, int currId) {
Employee *curr = idToEmployee[currId];
if (curr->subordinates.empty()) {
return curr->importance;
}
int total = curr->importance;
for (auto &nextId : curr->subordinates) {
total += dfs(employees, idToEmployee, nextId);
}
return total;
}
};
/*
// Definition for Employee.
class Employee {
public:
int id;
int importance;
vector<int> subordinates;
};
*/
class Solution {
public:
int getImportance(vector<Employee*> employees, int id) {
Employee *curr = findEmployeeById(employees, id);
if (curr == nullptr) {
return 0;
}
return dfs(employees, curr);
}
public:
Employee *findEmployeeById(vector<Employee*> &employees, int id) {
for (int i = 0; i < employees.size(); ++i) {
if (employees[i]->id == id) {
return employees[i];
}
}
return nullptr;
}
int dfs(vector<Employee*> &employees, Employee *curr) {
if (curr == nullptr) {
return 0;
}
if (curr->subordinates.empty()) {
return curr->importance;
}
int importance = curr->importance;
for (int i = 0; i < curr->subordinates.size(); ++i) {
Employee *next = findEmployeeById(employees, curr->subordinates[i]);
if (next == nullptr) {
continue;
}
importance += dfs(employees, next);
}
return importance;
}
};
/*
// Definition for Employee.
class Employee {
public:
int id;
int importance;
vector<int> subordinates;
};
*/
class Solution {
public:
int getImportance(vector<Employee*> employees, int id) {
unordered_map<int, Employee*> idToEmployee;
for (Employee *employee : employees) {
idToEmployee[employee->id] = employee;
}
queue<int> q;
int totalImportance = idToEmployee[id]->importance;
q.push(id);
while (!q.empty()) {
int currId = q.front();
Employee *currEmployee = idToEmployee[currId];
q.pop();
for (int &nextId : currEmployee->subordinates) {
Employee *nextEmployee = idToEmployee[nextId];
q.push(nextId);
totalImportance += nextEmployee->importance;
}
}
return totalImportance;
}
};
or
By clicking below, you agree to our terms of service.
New to HackMD? Sign up