1631 最小體力消耗路徑

2022-05-13 06:51:09 字數 1770 閱讀 1154

你準備參加一場遠足活動。給你乙個二維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

解釋:上圖所示路徑不需要消耗任何體力。

用個雙向佇列dfs跑一下就a了

class

solution:

def minimumeffortpath(self, heights: list[list[int]]) ->int:

q=deque([[0,0,0]])

effort=[[float('

inf')]*len(i) for i in

heights]

effort[0][0]=0

while

q: i,j,k=q.popleft()

if k<=effort[i][j]:

for x,y in (i-1,j),(i,j+1),(i+1,j),(i,j-1):

if 0<=xand 0<=y

z=max(k,abs(heights[x][y]-heights[i][j]))#

update z

if z#

update effort

effort[x][y]=z

return effort[-1][-1]

關於deque in python:deque in python

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 開始編號 你每次可以往 上...