#1905
Medium Algorithms Count sub islands
Array Depth-First Search Breadth-First Search Union-Find Matrix
73.0% acceptance
Feb 25, 2026
2641
91
You are given two m x n binary matrices grid1 and grid2 containing only 0's (representing water) and 1's (representing land). An island is a group of 1's connected 4-directionally (horizontal or vertical). Any cells outside of the grid are considered water cells.
An island in grid2 is considered a sub-island if there is an island in grid1 that contains all the cells that make up this island in grid2.
Return the number of islands in grid2 that are considered sub-islands.
Solution
Rust
Time O(n²)
Space O(n)
impl Solution {
pub fn count_sub_islands(grid1: Vec<Vec<i32>>, mut grid2: Vec<Vec<i32>>) -> i32 {
let m = grid2.len();
let n = grid2[0].len();
let mut count = 0;
for i in 0..m {
for j in 0..n {
if grid2[i][j] == 1 {
let mut is_sub = true;
Self::dfs(&grid1, &mut grid2, i, j, &mut is_sub);
if is_sub {
count += 1;
}
}
}
}
count
}
fn dfs(grid1: &[Vec<i32>], grid2: &mut Vec<Vec<i32>>, i: usize, j: usize, is_sub: &mut bool) {
if i >= grid2.len() || j >= grid2[0].len() || grid2[i][j] == 0 {
return;
}
if grid1[i][j] == 0 {
*is_sub = false;
}
grid2[i][j] = 0;
Self::dfs(grid1, grid2, i + 1, j, is_sub);
if i > 0 { Self::dfs(grid1, grid2, i - 1, j, is_sub); }
Self::dfs(grid1, grid2, i, j + 1, is_sub);
if j > 0 { Self::dfs(grid1, grid2, i, j - 1, is_sub); }
}
}