力扣 1334閾值距離內鄰居最少的城市

2021-10-08 21:29:46 字數 2392 閱讀 6858

題目描述

有 n 個城市,按從 0 到 n-1 編號。給你乙個邊陣列 edges,其中 edges[i] = [fromi, toi, weighti] 代表 fromi 和 toi 兩個城市之間的雙向加權邊,距離閾值是乙個整數 distancethreshold。

返回能通過某些路徑到達其他城市數目最少、且路徑距離 最大 為 distancethreshold 的城市。如果有多個這樣的城市,則返回編號最大的城市。

注意,連線城市 i 和 j 的路徑的距離等於沿該路徑的所有邊的權重之和。

示例 1:

輸入:n = 4, edges = [[0,1,3],[1,2,1],[1,3,4],[2,3,1]], distancethreshold = 4

輸出:3

解釋:城市分布圖如上。

每個城市閾值距離 distancethreshold = 4 內的鄰居城市分別是:

城市 0 -> [城市 1, 城市 2] 

城市 1 -> [城市 0, 城市 2, 城市 3] 

城市 2 -> [城市 0, 城市 1, 城市 3] 

城市 3 -> [城市 1, 城市 2] 

城市 0 和 3 在閾值距離 4 以內都有 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 內的鄰居城市分別是:

城市 0 -> [城市 1] 

城市 1 -> [城市 0, 城市 4] 

城市 2 -> [城市 3, 城市 4] 

城市 3 -> [城市 2, 城市 4]

城市 4 -> [城市 1, 城市 2, 城市 3] 

城市 0 在閾值距離 4 以內只有 1 個鄰居城市。

解題思路

djikstra演算法

這個演算法適合求單源最短路徑,即從乙個起點到其他點的最短距離,用到本題中也可以做,使用乙個for迴圈求每個點到其他點的路徑,再做比較即可。

網上看到兩篇djikstra演算法講得很清楚的部落格,特此記錄一下:

本題首先根據邊來構造鄰接矩陣,然後再使用djikstra演算法

class solution(object):

def findthecity(self, n, edges, distancethreshold):

def djikstra(source, threshold):

maximum = float('inf')

neibour_matrix = [[maximum] * n for i in range(n)]

for i, j, w in edges:

neibour_matrix[i][i] = 0

neibour_matrix[j][j] = 0

neibour_matrix[i][j] = w

neibour_matrix[j][i] = w

passed = [source]

nopass = [x for x in range(n) if x != source]

dis = neibour_matrix[source]

while nopass:

idx = nopass[0]

for i in nopass:

if dis[i] < dis[idx]:

idx = i

nopass.remove(idx)

for i in nopass:

if dis[idx] + neibour_matrix[idx][i] < dis[i]:

dis[i] = dis[idx] + neibour_matrix[idx][i]

return [i for i in range(len(dis)) if dis[i] <= distancethreshold and dis[i] != 0]

num = n + 1

ret = -1

node_dict = {}

for i in range(n):

x = djikstra(i, distancethreshold)

if len(x) <= num:

ret = i

num = len(x)

return ret

s = solution()

print(s.findthecity(4, [[0,1,3],[1,2,1],[1,3,4],[2,3,1]], 4))

閾值距離內鄰居最少的城市

有 n 個城市,按從 0 到 n 1 編號。給你乙個邊陣列 edges,其中 edges i fromi,toi,weighti 代表 fromi 和 toi 兩個城市之間的雙向加權邊,距離閾值是乙個整數 distancethreshold。返回能通過某些路徑到達其他城市數目最少 且路徑距離 最大 ...

力扣)72 編輯距離

難度在於定義最優解的結構。根據動態規劃思想容易定義出dp i j 表示word1的前i段與word2的前j段的編輯距離。最難想到的是最優解的結構,即替換,刪除和插入三種操作可以分別用dp i 1 j 1 1,dp i 1 j 1和dp i j 1 1表示。dp i j 代表 word1 到 i 位置...

dp 力扣 72 編輯距離

給你兩個單詞 word1 和 word2,請你計算出將 word1 轉換成 word2 所使用的最少運算元 你可以對乙個單詞進行如下三種操作 插入乙個字元 刪除乙個字元 替換乙個字元 示例 1 輸入 word1 horse word2 ros 輸出 3解釋 horse rorse 將 h 替換為 r...