iT邦幫忙

2022 iThome 鐵人賽

DAY 28
0

重新整理幾次後學妹開始不耐煩,瘋狂點擊重新整理。

「等等,這樣算是一種DoS吧?會被擋IP的。」結果我阻止得太慢。已經被設定為拒絕往來戶了。

「啊,怎麼辦啊學姊?」學妹沒想到手速快也是個錯。

我深呼吸平靜了一下情緒:「都已經這樣了還能怎麼辦,只好等網站釋放我們的IP或是我們更換IP。」

結果等了很久都沒有被放出來,所以我們決定先好好休息,隔日再戰。

翌日。

「學姊,網站恢復正常了!」

聽到學妹的喊聲,我揉揉還有些困倦的眼睛,瞇著眼回覆她:「好啦,沒事就好,那今天也繼續努力解題吧。」

「學姊我開了一題easy的題目872. Leaf-Similar Trees,但是有點卡關,幫我看看吧。」

我匆匆洗把臉後,看向學妹寫的程式碼,有時候看程式碼比看題目快。

class Solution {
    fun leafSimilar(root1: TreeNode?, root2: TreeNode?): Boolean {
        val leaf1 = LinkedList<Int>()
        val leaf2 = LinkedList<Int>()
        getLeaf(root1!!, leaf1)
        getLeaf(root2!!, leaf2)
        return leaf1 == leaf2
    }
    fun getLeaf(node: TreeNode, list: MutableList<Int>) {
        node.left?.let {
            getLeaf(it, list)
            node.right?.let {
                getLeaf(it, list)
            }
        } ?: node.right?.let {
            getLeaf(it, list)
        } ?: list.add(node.`val`)
    }

「哦,是要把leaf找出來,然後比對吧。」

「是呀,但是怪怪的,在這個例子會出錯。」

[1,2]
[2,2]

我重新看了一次程式碼,找到了原因。「妳有個?.沒有放?:,結果在node.right是Null的情況下,程式跑去執行另一個存在的Null行程,把有left的root也當作leaf。」

「了解,馬上改!」

學妹不愧是個行動派,馬上就開始修正程式碼。

「既然要改,那就把LinkedList改成Stack吧,速度會更快唷。」

class Solution {
    fun leafSimilar(root1: TreeNode?, root2: TreeNode?): Boolean {
        val leaf1 = Stack<Int>()
        val leaf2 = Stack<Int>()
        getLeaf(root1!!, leaf1)
        getLeaf(root2!!, leaf2)
        return leaf1 == leaf2
    }
    fun getLeaf(node: TreeNode, stack: Stack<Int>) {
        node.left?.let {
            getLeaf(it, stack)
            node.right?.let {
                getLeaf(it, stack)
            } ?: return
        } ?: node.right?.let {
            getLeaf(it, stack)
        } ?: stack.add(node.`val`)
    }
}

「那乾脆改成ArrayDeque?我記得學姊說過,ArrayDeque沒有synchronized所以比Stack更快。」

「不行喔,雖然我們的確沒遇上需要synchronized的情境,但因為ArrayDeque沒有覆蓋原生的相等equals判斷,所以沒辦法直接比較不同ArrayDeque的成員是不是相同。」

我們興奮地討論更好更快的做法。

所以沒有注意到,門上的5不知道何時掉了下來,卡在橫槓上,形成了∞的符號。

Bad End


上一篇
Day27: [Normal End] Depth-First-Search注意繞圈子
下一篇
Day 29: [Happy End] Codeforces 相見歡
系列文
不解題就不能離開的房間31
圖片
  直播研討會
圖片
{{ item.channelVendor }} {{ item.webinarstarted }} |
{{ formatDate(item.duration) }}
直播中

尚未有邦友留言

立即登入留言