Last Day Where You Can Still Cross
Explore how to apply the union-find algorithm to solve the problem of finding the last day you can cross a 1-based binary matrix filled with land and water. Understand how flooding transforms the matrix over days and learn to track connectivity to identify when crossing is no longer possible.
We'll cover the following...
Statement
You are given two integers, rows and cols, which represent the number of rows and columns in a
Initially, on day 0, the whole matrix will just be all 0s, that is, all land. With each passing day, one of the cells of this matrix will get flooded and, therefore, will change to water, that is, from to . This continues until the entire matrix is flooded. You are given a 1-based array, waterCells, that records which cell will be flooded on each day. Each element indicates the cell present at the row and column of the matrix that will change from land to water on the day.
We can cross any cell of the matrix as long as it’s land. Once it changes to water, we can’t cross it. To cross any cell, we can only move in one of the four waterCells, you are required to find the last day where you can still cross the matrix, from top to bottom, by walking over the land cells only.
Note: You can start from any cell in the top row, and you need to be able to reach just one cell in the bottom row for it to count as a crossing.
Constraints:
-
rowscols -
rowscols waterCells.lengthrowscols-
rows -
cols - All values of
waterCellsare unique.
Examples
Understand the problem
Let’s take a moment to make sure you’ve correctly understood the problem. The quiz below helps you check if you’re solving the correct problem:
Last Day Where You Can Still Cross
Given these values as input, which matrix represents the state of the matrix on day 4?
Note: In the options, represents water.
| 0 | 0 | 0 |
| 0 | 0 | 0 |
| 0 | 0 | 0 |
| 1 | 0 | 1 |
| 0 | 1 | 0 |
| 1 | 1 | 0 |
| 0 | 0 | 1 |
| 0 | 1 | 0 |
| 1 | 1 | 0 |
| 1 | 1 | 0 |
| 0 | 1 | 0 |
| 0 | 0 | 1 |
Figure it out!
We have a game for you to play. Rearrange the logical building blocks to develop a clearer understanding of how to solve this problem.
Try it yourself
Implement your solution in LastDayToCross.java in the following coding playground. You’ll need the provided supporting code to implement your solution.
/*⬅️ We have provided a UnionFind.java file under the "Files" tabof this widget. You can use this file to build your solution.*/import java.util.*;class LastDayToCross {public static int lastDayToCross(int rows, int cols, int[][] waterCells) {// replace this placeholder return statement with your codereturn -1;}}