778 水位上公升的泳池中游泳 並查集

2021-10-20 18:38:55 字數 1483 閱讀 9342

778. 水位上公升的泳池中游泳

難度困難159

在乙個 n x n 的座標方格grid中,每乙個方格的值grid[i][j]表示在位置(i,j)的平台高度。

現在開始下雨了。當時間為t時,此時雨水導致水池中任意位置的水位為t。你可以從乙個平台遊向四周相鄰的任意乙個平台,但是前提是此時水位必須同時淹沒這兩個平台。假定你可以瞬間移動無限距離,也就是預設在方格內部游動是不耗時的。當然,在你游泳的時候你必須待在座標方格裡面。

你從座標方格的左上平台 (0,0) 出發。最少耗時多久你才能到達座標方格的右下平台(n-1, n-1)

示例 1:

輸入:[[0,2],[1,3]]輸出:3解釋:時間為0時,你位於座標方格的位置為(0, 0)。此時你不能遊向任意方向,因為四個相鄰方向平台的高度都大於當前時間為 0 時的水位。

等時間到達 3 時,你才可以遊向平台 (1, 1). 因為此時的水位是 3,座標方格中的平台沒有比水位 3 更高的,所以你可以遊向座標方格中的任意位置

示例2:

輸入: [[0,1,2,3,4],[24,23,22,21,5],[12,13,14,15,16],[11,17,18,19,20],[10,9,8,7,6]]

輸出: 16

解釋: 0 1 2 3 4

24 23 22 21 5

12 13 14 15 16

11 17 18 19 20

10 9 8 7 6

最終的路線用加粗進行了標記。

我們必須等到時間為 16,此時才能保證平台 (0, 0) 和 (4, 4) 是連通的

class unionfind 

}find(x)

return x

}union(x, y)

}}var swiminwater = function(grid) = unionfind; //

// 存下來座標

let idx = new array(n*n).fill(0).map(() => new array(2).fill(0)) // 儲存每個平台高度對應的位置

for (let i = 0; i < n; i++)

}const directions = [[0, 1], [0, -1], [-1, 0], [1, 0]]

for (let th = 0; th < n*n; th++)

if (unionfind.find(0) === unionfind.find( n * n - 1)) }}

return -1;

};

778 水位上公升的泳池中游泳

778.水位上公升的泳池中游泳 在乙個 n x n 的座標方格grid中,每乙個方格的值grid i j 表示在位置 i,j 的平台高度。現在開始下雨了。當時間為t時,此時雨水導致水池中任意位置的水位為t。你可以從乙個平台遊向四周相鄰的任意乙個平台,但是前提是此時水位必須同時淹沒這兩個平台。假定你可...

力扣778水位上公升的泳池中游泳 python

res 0 n len grid heap grid 0 0 0,0 初始化第乙個點 visited set 0,0 我們建立個集合儲存我們走過的點,不需要再走一遍了 while heap res max res,height 我們選取最高水位作為返回值 if x n 1and y n 1 retu...

每日一題 778 水位上公升的泳池中游泳

778.水位上公升的泳池中游泳 分類 並查集 二分答案 最短路 並查集思路挺簡單的。由小到大挨個加,檢查下連上了沒就行。class unionfind introot int i bool connect int i,int j if sz ri sz rj u rj ri sz ri sz rj ...