ETH官方钱包

前往
大廳
主題

LeetCode - 1334. Find the City With the Smallest Number of Neighbors at a Threshold Distance 解題心得

Not In My Back Yard | 2024-08-17 12:00:08 | 巴幣 0 | 人氣 37

題目連結:


題目意譯:
現在有 n 座城市,編號為 0 到 n - 1。給定陣列 edges 以及一整數 distanceThreshold,其中 edges[i] = [fromi, toi, weighti] 代表存在著一條雙向的有權邊位於城市 fromi 和 toi 之間。

回傳一座城市的編號,其中該城市擁有最少的藉由一些路徑可抵達之城市,而每一條路徑距離最大為 distanceThreshold;如果有多座這樣子的城市存在,則回傳其中編號最大者。

注意到連接城市 i 到城市 j 的路徑之距離是該路徑上經過的邊之權重值總和。

限制:
2 ≦ n ≦ 100
1 ≦ edges.length ≦ n × (n - 1) / 2
edges[i].length == 3
0 ≦ fromi < toi < n
1 ≦ weighti, distanceThreshold ≦ 10 ^ 4
每一對 (fromi, toi) 彼此相異。



範例測資:
範例 1:
輸入: n = 4, edges = [[0,1,3],[1,2,1],[1,3,4],[2,3,1]], distanceThreshold = 4
輸出: 3
解釋: 上圖為輸入給定的圖。
以 distanceThreshold = 4 為界,每一座城市的「鄰居」為:
City 0 -> [City 1, City 2]
City 1 -> [City 0, City 2, City 3]
City 2 -> [City 0, City 1, City 3]
City 3 -> [City 1, City 2]
城市 0 和 3 有 2 個「鄰居」,但我們需要回傳城市 3 因為其編號最大。

範例 2:
輸入: n = 5, edges = [[0,1,2],[0,4,8],[1,2,3],[1,4,2],[2,3,1],[3,4,1]], distanceThreshold = 2
輸出: 0
解釋: 上圖為輸入給定的圖。
以 distanceThreshold = 2 為界,每一座城市的「鄰居」為:
City 0 -> [City 1]
City 1 -> [City 0, City 4]
City 2 -> [City 3, City 4]
City 3 -> [City 2, City 4]
City 4 -> [City 1, City 2, City 3]
城市 0 有 1 個「鄰居」。


解題思維:
由於城市數最大只有 100,而我們又要知道它們各自可以在不超過 distanceThreshold 的情況下走到哪些城市。因此直接使用 Floyd-Warshall 求出所有城市對的距離即可,參見這題

最後再對每一座城市掃過所有城市判斷有多少距離小於等於 distanceThreshold 即可知道何者最少。




此次分享到此為止,如有任何更加簡潔的想法或是有說明不清楚之地方,也煩請各位大大撥冗討論。

創作回應

更多創作