「兩位後來有整理自己的答題紀錄了嗎?」
「嗯!後來我們都嘗試開好自己的 github 帳號,並且放上之前解題的紀錄了!」
「而且!我們兩個後來還自己解了一題喔!」
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]
}
「真厲害!其實圖的題目,算是比較難的。不過有時候也會有簡單的題目。
類似的觀念,也可以用來解其他題目喔!」
這題稍微有點難度,兩人花了一些時間,不過最終還是很順利的破解
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 }
}
}
「哇!兩位都越來越厲害了!」夏天開心的說
「這兩題似乎都沒有遇到夏天姐提到的狀況?」
「是的!這兩題在圖的題目裡面,相對都是簡單一些的。不過還是不錯的練習吧!」