iT邦幫忙

2022 iThome 鐵人賽

DAY 23
0

「兩位後來有整理自己的答題紀錄了嗎?」

「嗯!後來我們都嘗試開好自己的 github 帳號,並且放上之前解題的紀錄了!」

「而且!我們兩個後來還自己解了一題喔!」

617. Merge Two Binary Trees

class Solution {
    fun mergeTrees(t1: TreeNode?, t2: TreeNode?): TreeNode? {
        return when {
            t1 == null -> t2
            t2 == null -> t1
            else -> t1.apply {
                `val` += t2.`val`
                left = mergeTrees(left, t2.left)
                right = mergeTrees(right, t2.right)
            }
        }
    }
}

「很厲害喔!看得出來兩位對樹的題目都很有概念了

那今天,我們來分享跟『圖』有關的題目!」

「圖?」

「對呀。在程式裡面,所謂的圖,其實就是由點和邊所構成的資料結構。有點像是之前我們題目提到的樹一樣,不過不同的地方是,圖裡面是會有迴圈的,所以之前我們解決樹的題目時,不斷往下搜尋的作法,可能會出現問題。

我們實際來看一題題目看看!」

1791. Find Center of Star Graph

You are given a 2D integer array edges where each edges[i] = [ui, vi] indicates that there is an edge between the nodes ui and vi. Return the center of the given star graph.

「原來可以用這種方式表達圖,又學到一課」

「咦?可是說起來,這一題的邏輯似乎很簡單?」

class Solution {
    fun findCenter(edges: Array<IntArray>) =
        if (edges[0][0] == edges[1][0] || edges[0][0] == edges[1][1])
            edges[0][0] else edges[0][1]
}

「真厲害!其實圖的題目,算是比較難的。不過有時候也會有簡單的題目。

類似的觀念,也可以用來解其他題目喔!」

997. Find the Town Judge

這題稍微有點難度,兩人花了一些時間,不過最終還是很順利的破解

class Solution {
    fun findJudge(n: Int, trust: Array<IntArray>): Int {
        if (trust.isEmpty()) return if (n == 1) 1 else -1

        val flags = IntArray(n + 1) { 0 }

        for (pair in trust) {
            flags[pair[1]]++
            flags[pair[0]]--
        }

        return flags.indexOfFirst { it == n - 1 }
    }
}

「哇!兩位都越來越厲害了!」夏天開心的說

「這兩題似乎都沒有遇到夏天姐提到的狀況?」

「是的!這兩題在圖的題目裡面,相對都是簡單一些的。不過還是不錯的練習吧!」


上一篇
Day 22:在 github 寫下答題紀錄:461、67、226、415
下一篇
Day 24:自主學習 leetcode 帶來順利的一天:2114、2011、2160、1920
系列文
Kotlin 程式人:Leetcode 意外旅程30
圖片
  直播研討會
圖片
{{ item.channelVendor }} {{ item.webinarstarted }} |
{{ formatDate(item.duration) }}
直播中

尚未有邦友留言

立即登入留言