1. 程式人生 > >LeetCode 690. Employee Importance題解

LeetCode 690. Employee Importance題解

題目

題目連結
題目會會給出一系列的員工資訊,包括員工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; }