即使非常著急,但是我們也怕錯過網站修好的時機,每隔幾分鐘就重新整理網頁。
在時間不知道流逝了多久之後,學妹突然開口說道:「⋯⋯學姊,妳講講妳還解過的其他medium題目吧。」
「也好,我就說說一些特別要注意的點吧。比如802. Find Eventual Safe States這個題目要找有終點的安全路線。陣列有排序這點就先不提了,重點在這個Constraints:The graph may contain self-loops.
」
「妳的意思是?」
「本來找終點,只要不停往深處走,但是這樣一來遇到self-loop就完了,會不停繞圈子不知道何時結束。」
學妹點點頭表示理解,示意我繼續説。
「所以在第一次走的不確定路線上,必須先假設這條路不安全,直到我們確認過這條路是安全的為止。這樣一來一旦我們繞圈子,就會看到之前的不安全標記,就知道這條路走過了,該放棄這個路線。」
class Solution {
fun eventualSafeNodes(graph: Array<IntArray>): List<Int> {
val nodeStates = IntArray(graph.size) { 0 }
val result = ArrayList<Int>()
for (i in 0..graph.lastIndex) {
if (isSafeState(i, nodeStates, graph)) {
result.add(i)
}
}
return result
}
fun isSafeState(node: Int, nodeStates: IntArray, graph: Array<IntArray>): Boolean {
return when {
nodeStates[node] == 0 -> {
nodeStates[node] = -1//先假設這條路不安全!!!
for (next in graph[node]) {
if (!isSafeState(next, nodeStates, graph)) {
return false
}
}
nodeStates[node] = 1
return true
}
else -> nodeStates[node] == 1
}
}
}
「如果這次可以平安回去的話,我想給妳看看我這解法能達到的漂亮百分百成績。」嗚嗚嗚。想回家。
就在我開始回想過去人生的時候,學妹發出歡喜的聲音:「學姊!網站好了!」
我睜開眼睛。「真的!是真的!太好了!」
「學姊這個解法真不錯,從倒數一下衝到前排。」學妹一臉佩服。
「還可以啦,妳有機會的話也能挑戰百分百成績,心情會特別好。」有種打敗天下所有人的舒爽感。
「學姊,我好像現在就能感受到妳那時的心情了!」學妹咽了咽口水:「大門開了!我們自由了!」
「什麼?所以已經第五天了嗎?」
學妹看了看電腦時間:「好像是呢。剛剛,我們送出去答案的時間正好離12點還有1分鐘。」
「超級驚險啊,不過,反正在死線前送出去就沒問題啦。」我們相對一笑,開心的牽手跑向大門。
門外,是我們熟悉的光景。
我們,回來了。
Normal End