LeetCode 690. Employee Importance題解
阿新 • • 發佈:2019-02-07
題目
題目連結
題目會會給出一系列的員工資訊,包括員工id、員工重要度及其直接下屬。我們將輸入一個員工的id,然後得到他以及他所有下屬的重要程度之和。這裡需注意是所有下屬,所以還需要找到下屬的下屬。
思路
這道題是一道bfs(廣度優先遍歷)的題目。
- 我們的目標首先是找到這個員工,這個用一個遍歷就完成了。
- 然後,將其重要程度加入累加器中,然後進行查詢其所有下屬,並將下屬們的重要度加入累加器。
- 繼續查詢下屬的下屬,直到沒有下屬沒有下屬為止。
整個題目其實比較簡單,就是給的下屬列表中給的是下屬的id,所以我們還需要用id進行查詢,如果直接給物件簡直就是輕鬆愉快啊。。
程式碼實現(Java)
bfs很顯然就要利用一下佇列這個資料結構了,整體的思路相對來說還是很清晰的。
public int getImportance(List<Employee> employees, int id) {
int targetedEm = 0;
int importance = 0;
for (Employee employee : employees) {
if(employee.id == id) {
targetedEm = employee.id;
}
}
Queue<Integer> queue = new LinkedList<Integer>();
queue.add(targetedEm);
while(!queue.isEmpty()) {
int now = (int) queue.poll();
Employee nowEm = new Employee();
for(Employee employee : employees) {
if(employee.id == now) {
nowEm = employee;
importance += nowEm.importance;
}
}
if ( !nowEm.subordinates.isEmpty() ) {
for(Integer subordinate : nowEm.subordinates) {
queue.add(subordinate);
}
}
}
return importance;
}