leetCode 最小體力消耗路徑

2021-10-18 04:44:40 字數 1376 閱讀 9605

題目可以轉化為:

是否存在一條路徑,該路徑上的體力值不超過x,可以從左上角到達右下角

假設x = x0時存在路徑可以從左上角到達右下角,那麼當x增大時原來的路徑仍然可以使用。因此可以使用二分查詢,每次估測乙個x,然後進行廣度或者深度優先搜尋,最後根據能否到達右下角來縮小搜尋範圍。

class

solution,,

,};public

intminimumeffortpath

(int

heights));

seen[0]

[0]=

true

;while

(!queue.

isempty()

)); seen[nx]

[ny]

=true;}

}}if(seen[rows -1]

[cols -1]

)else

}return ans;

}}

將這 rows * cols 個節點放入並查集中,實時維護它們的連通性。

由於我們需要找到從左上角到右下角的最短路徑,因此我們可以將圖中的所有邊按照權值從小到大進行排序,並依次加入並查集中。當我們加入一條權值為 x 的邊之後,如果左上角和右下角從非連通狀態變為連通狀態,那麼 x 即為答案。

class

solution);

}if(j >0)

);}}

} collections.

sort

(edges,

(o1, o2)

-> o1[2]

- o2[2]

);unionfind uf =

newunionfind

(rows * cols)

;int ans =0;

for(

int[

] edge : edges)

}return ans;

}class

unionfind

}public

intfind

(int x)

return parent[x];}

public

void

union

(int x,

int y)

public

boolean

connected

(int x,

int y)

}}

leetcode最小體力消耗路徑

你準備參加一場遠足活動。給你乙個二維 rows x columns 的地圖 heights 其中 heights row col 表示格仔 row,col 的高度。一開始你在最左上角的格仔 0,0 且你希望去最右下角的格仔 rows 1,columns 1 注意下標從 0 開始編號 你每次可以往 上...

LeetCode 1631 最小體力消耗路徑

題目鏈結 你準備參加一場遠足活動。給你乙個二維 rows x columns 的地圖 heights 其中 heights row col 表示格仔 row,col 的高度。一開始你在最左上角的格仔 0,0 且你希望去最右下角的格仔 rows 1,columns 1 注意下標從 0 開始編號 你每次...

1631 最小體力消耗路徑

1631.最小體力消耗路徑 你準備參加一場遠足活動。給你乙個二維rows x columns的地圖heights,其中heights row col 表示格仔 row,col 的高度。一開始你在最左上角的格仔 0,0 且你希望去最右下角的格仔 rows 1,columns 1 注意下標從0開始編號 ...