你準備參加一場遠足活動。給你乙個二維 rows x columns 的地圖 heights ,其中 heights[row][col] 表示格仔 (row, col) 的高度。一開始你在最左上角的格仔 (0, 0) ,且你希望去最右下角的格仔 (rows-1, columns-1) (注意下標從 0 開始編號)。你每次可以往 上,下,左,右 四個方向之一移動,你想要找到耗費 體力 最小的一條路徑。
一條路徑耗費的 體力值 是路徑上相鄰格仔之間 高度差絕對值 的 最大值 決定的。
請你返回從左上角走到右下角的最小 體力消耗值 。
示例 1:
輸入:heights = [[1,2,2],[3,8,2],[5,3,5]]
輸出:2
解釋:路徑 [1,3,5,3,5] 連續格仔的差值絕對值最大為 2 。
這條路徑比路徑 [1,2,2,2,5] 更優,因為另一條路徑差值最大值為 3 。
示例 2:
輸入:heights = [[1,2,3],[3,8,4],[5,3,5]]
輸出:1
解釋:路徑 [1,2,3,4,5] 的相鄰格仔差值絕對值最大為 1 ,比路徑 [1,3,5,3,5] 更優。
示例 3:
輸入:heights = [[1,2,1,1,1],[1,2,1,2,1],[1,2,1,2,1],[1,2,1,2,1],[1,1,1,2,1]]
輸出:0
解釋:上圖所示路徑不需要消耗任何體力。
rows == heights.length
columns == heights[i].length
1 <= rows, columns <= 100
1 <= heights[i][j] <= 106
一開始就看不懂,然後找題解發現並查集還能這樣用!!!
這個月考的並查集特別頻繁,那就用並查集寫
由於我們需要找到從左上角到右下角的最短路徑,因此我們可以將圖中的所有邊按照權值從小到大進行排序,並依次加入並查集中。當我們加入一條權值為 xx 的邊之後,如果左上角和右下角從非連通狀態變為連通狀態,那麼 xx 即為答案。
class
unionfind
:def
__init__
(self, n:
int)
: self.parent =
list
(range
(n))
self.size =[1
]* n
self.n = n
# 當前連通分量數目
1631 最小體力消耗路徑
1631.最小體力消耗路徑 你準備參加一場遠足活動。給你乙個二維rows x columns的地圖heights,其中heights row col 表示格仔 row,col 的高度。一開始你在最左上角的格仔 0,0 且你希望去最右下角的格仔 rows 1,columns 1 注意下標從0開始編號 ...
1631 最小體力消耗路徑
你準備參加一場遠足活動。給你乙個二維 rows x columns 的地圖 heights 其中 heights row col 表示格仔 row,col 的高度。一開始你在最左上角的格仔 0,0 且你希望去最右下角的格仔 rows 1,columns 1 注意下標從 0 開始編號 你每次可以往 上...
1631 最小體力消耗路徑
你準備參加一場遠足活動。給你乙個二維rows x columns的地圖heights,其中heights row col 表示格仔 row,col 的高度。一開始你在最左上角的格仔 0,0 且你希望去最右下角的格仔 rows 1,columns 1 注意下標從 0 開始編號 你每次可以往 上,下,左...