思路:(方法1:dfs)dfs是最容易想到的,這是遍歷樹結構常用的一種遞迴演算法,用hashmap來儲存這個有向圖結構(也類似於多叉樹),從head節點開始遞迴遍歷他的子節點,相當於計算每一條從head出發到各個葉子節點的time取最大值即可。
class
solution
map> map =
newhashmap
<
>()
;for
(int i =
0; i < manager.length; i++
)return
dfs(map, headid, informtime);}
private
intdfs
(map
> map,
int cur,
int[
] informtime)
return informtime[cur]
+ max;
}}
思路:(方法2:bfs)看到大多數答案都是dfs所以決定試一下bfs練練手,但是一開始我想的bfs方法是錯誤的,一開始我以為在遍歷每一層的時候取該層的最大值即可,後來發現並不是所有的葉子節點都在同一層,所以這種想法是錯誤的。我使用time陣列來儲存到達每個節點時的時間,這樣就不需要再定義乙個多餘的資料結構類了。然後使用bfs的基本遍歷方法逐層遍歷並同時一層層更新time陣列,用max記錄最大值,迭代後的max即為最終結果。
class
solution
map> map =
newhashmap
<
>()
;for
(int i =
0; i < manager.length; i++
)int max =0;
int[
] time =
newint
[manager.length]
; linkedlist
q =newlinkedlist
<
>()
;
q.add(headid)
;while
(!q.
isempty()
)
max = math.
max(time[i]
,max);}
return max;
}}
力扣解題思路 打家劫舍
思路 題目 你是乙個專業的小偷,計畫偷竊沿街的房屋,每間房內都藏有一定的現金。這個地方所有的房屋都圍成一圈,這意味著第乙個房屋和最後乙個房屋是緊挨著的。同時,相鄰的房屋裝有相互連通的防盜系統,如果兩間相鄰的房屋在同一晚上被小偷闖入,系統會自動報警。給定乙個代表每個房屋存放金額的非負整數陣列,計算你在...
力扣解題思路 素數
首先,如何判斷乙個數是否為素數呢,首先我們知道最小的素數是2,那麼我們從2開始判斷該數是否能找到被除數即可,完整 如下 public boolean isprimenum int i return true 思路 統計所有小於非負整數 n 的質數的數量。那麼這一題我們需要對每個小於n的數進行判斷一次...
力扣解題思路 區間排序問題
思路 每次遇到和區間有關的題都要思考半天區間的排序方法,是根據區間左邊排序還是根據區間右邊排序呢?另外遇到這種題目如果採取貪心演算法最後的結果會不會是最優的呢?主要是因為研究生期間我的研究方向是強化學習演算法,其中用到的貪婪演算法容易陷入區域性最優,所以每次看到適合用貪婪演算法解題的題目時總會思考貪...