778. 水位上公升的泳池中游泳
在乙個 n x n 的座標方格grid
中,每乙個方格的值grid[i][j]
表示在位置(i,j)
的平台高度。
現在開始下雨了。當時間為t
時,此時雨水導致水池中任意位置的水位為t
。你可以從乙個平台遊向四周相鄰的任意乙個平台,但是前提是此時水位必須同時淹沒這兩個平台。假定你可以瞬間移動無限距離,也就是預設在方格內部游動是不耗時的。當然,在你游泳的時候你必須待在座標方格裡面。
你從座標方格的左上平台 (0,0) 出發。最少耗時多久你才能到達座標方格的右下平台(n-1, n-1)
?
示例 1:
輸入:[[0,2],[1,3]]輸出:3解釋:時間為0時,你位於座標方格的位置為示例2:(0, 0)。
此時你不能遊向任意方向,因為四個相鄰方向平台的高度都大於當前時間為 0 時的水位。等時間到達 3 時,你才可以遊向平台 (1, 1). 因為此時的水位是 3,座標方格中的平台沒有比水位 3 更高的,所以你可以遊向座標方格中的任意位置
輸入:[[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 424 23 22 21512 13 14 15 161117 18 19 2010 9 8 7 6最終的路線用加粗進行了標記。我們必須等到時間為 16,此時才能保證平台 (0, 0) 和 (4, 4) 是連通的
2 <= n <= 50
.
grid[i][j]
是[0, ..., n*n - 1]
的排列。
思路:分析一下,當時刻為t的時候,所有格仔中的水位是一樣高的,所以最低的水位就是路徑上的最大值,我們要讓這個最大值最小,和昨天那道1631. 最小體力消耗路徑一樣的思路啊喂:
a. 二分答案 + 連通性判定(bfs or dfs)
class solution ;
bool bfs(int n, int m, vector>& grid, int limit));
visited[0][0] = true;
node node;
while(!que.empty())
if(x > 0 && !visited[x - 1][y] && grid[x - 1][y] <= limit));
}if(x + 1 < n && !visited[x + 1][y] && grid[x + 1][y] <= limit));
}if(y > 0 && !visited[x][y - 1] && grid[x][y - 1] <= limit));
}if(y + 1 < m && !visited[x][y + 1] && grid[x][y + 1] <= limit));}}
return false;
}int swiminwater(vector>& grid) else
}return ans;
}};
b. 並查集+貪心
class solution
void union(int a, int b)
}int inset[55][55];
struct point
};point points[2510];
int swiminwater(vector>& grid) ;}}
sort(points, points + cnt);
for(i = 0; i < cnt; ++ i)
if(x + 1 < n && inset[x + 1][y])
if(y > 0 && inset[x][y - 1])
if(y + 1 < n && inset[x][y + 1])
}return 0; //出發點就是目標點
}};
c. djkstra求最短路
class solution
};int swiminwater(vector>& grid) );
point point;
while(!pri_que.empty())
//沒到終點 更新dist
if(x > 0 && !visited[x - 1][y]));
}if(x + 1 < n && !visited[x + 1][y]));
}if(y > 0 && !visited[x][y - 1]));
}if(y + 1 < n && !visited[x][y + 1]));}}
return 0; //出發點就是目標點
}};
力扣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.水位上公升的泳池中游泳 難度困難159 在乙個 n x n 的座標方格grid中,每乙個方格的值grid i j 表示在位置 i,j 的平台高度。現在開始下雨了。當時間為t時,此時雨水導致水池中任意位置的水位為t。你可以從乙個平台遊向四周相鄰的任意乙個平台,但是前提是此時水位必須同時淹沒這兩...
每日一題 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 ...