iT邦幫忙

2022 iThome 鐵人賽

DAY 27
0

即使非常著急,但是我們也怕錯過網站修好的時機,每隔幾分鐘就重新整理網頁。

在時間不知道流逝了多久之後,學妹突然開口說道:「⋯⋯學姊,妳講講妳還解過的其他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
        }
    }
}

「如果這次可以平安回去的話,我想給妳看看我這解法能達到的漂亮百分百成績。」嗚嗚嗚。想回家。

截圖 2022-10-03 下午11 20 15

就在我開始回想過去人生的時候,學妹發出歡喜的聲音:「學姊!網站好了!」

我睜開眼睛。「真的!是真的!太好了!」

「學姊這個解法真不錯,從倒數一下衝到前排。」學妹一臉佩服。

截圖 2022-10-02 下午12 24 08

「還可以啦,妳有機會的話也能挑戰百分百成績,心情會特別好。」有種打敗天下所有人的舒爽感。

「學姊,我好像現在就能感受到妳那時的心情了!」學妹咽了咽口水:「大門開了!我們自由了!」

「什麼?所以已經第五天了嗎?」

學妹看了看電腦時間:「好像是呢。剛剛,我們送出去答案的時間正好離12點還有1分鐘。」

「超級驚險啊,不過,反正在死線前送出去就沒問題啦。」我們相對一笑,開心的牽手跑向大門。

門外,是我們熟悉的光景。

我們,回來了。

Normal End


上一篇
Day26: Bug並不可怕,可怕的是⋯⋯
下一篇
Day 28: [Bad End] LinkedList、Stack、ArrayDeque速度的代價
系列文
不解題就不能離開的房間31
圖片
  直播研討會
圖片
{{ item.channelVendor }} {{ item.webinarstarted }} |
{{ formatDate(item.duration) }}
直播中

尚未有邦友留言

立即登入留言