You are given an n x n integer matrix grid where each value grid[i][j] represents the elevation at that point (i, j).
It starts raining, and water gradually rises over time. At time t, the water level is t, meaning any cell with elevation less than equal to t is submerged or reachable.
You can swim from a square to another 4-directionally adjacent square if and only if the elevation of both squares individually are at most t. You can swim infinite distances in zero time. Of course, you must stay within the boundaries of the grid during your swim.
Return the minimum time until you can reach the bottom right square (n - 1, n - 1) if you start at the top left square (0, 0).
Input: grid = [[0,2],[1,3]]
Output: 3
Explanation:
At time 0, you are in grid location (0, 0).
You cannot go anywhere else because 4-directionally adjacent neighbors have a higher elevation than t = 0.
You cannot reach point (1, 1) until time 3.
When the depth of water is 3, we can swim anywhere inside the grid.
Input: grid = [[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]]
Output: 16
Explanation: The final route is shown. We need to wait until time 16 so that (0, 0) and (4, 4) are connected.
n == grid.lengthn == grid[i].length1 <= n <= 500 <= grid[i][j] < n2grid[i][j] is unique.The first approach is a brute force method, where we simulate the water level increasing over time and check if a path exists from the top-left to the bottom-right of the grid for each water level. This approach can be implemented using a BFS or DFS to explore the reachability of the target cell at each possible water level.
This approach improves upon the brute force method by applying binary search on the possible time value. For each middle value, we determine if the path can be formed using BFS/DFS as before. This significantly reduces the time complexity since we're not iterating through every possible water level but rather narrowing down the possibilities using binary search.
The optimal approach for this problem is to use a priority queue (min-heap) to simulate Dijkstra's algorithm, which efficiently finds the minimum-path to the destination as the constraints evolve. Here, the priority queue helps in efficiently computing which cell to visit next based on the minimum possible water level encountered on the path.