Skip to content

Commit 8fd1ea1

Browse files
CHAUDHARY ShikharCHAUDHARY Shikhar
CHAUDHARY Shikhar
authored and
CHAUDHARY Shikhar
committed
Added RiverSizes.java
1 parent da7cf0d commit 8fd1ea1

File tree

1 file changed

+99
-0
lines changed

1 file changed

+99
-0
lines changed

Medium/RiverSizes.java

Lines changed: 99 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,99 @@
1+
package AlgoExpert_Medium;
2+
3+
import java.util.List;
4+
import java.util.ArrayList;
5+
6+
public class RiverSizes {
7+
8+
public static void main(String[] args) {
9+
10+
int[][] matrix = { { 1, 0, 0, 1, 0, 1, 0, 0, 1, 1, 1, 0 },
11+
{ 1, 0, 1, 0, 0, 1, 1, 1, 1, 0, 1, 0 },
12+
{ 0, 0, 1, 0, 1, 1, 0, 1, 0, 1, 1, 1 },
13+
{ 1, 0, 1, 0, 1, 1, 0, 0, 0, 1, 0, 0 },
14+
{ 1, 0, 1, 1, 0, 0, 0, 1, 1, 1, 0, 1 }
15+
};
16+
17+
System.out.println(riverSizes(matrix));
18+
19+
}
20+
21+
public static List<Integer> riverSizes(int[][] matrix) {
22+
23+
int rows = matrix.length;
24+
int columns = matrix[0].length ; // Ask the interviewer whether there is atleast 1 row.
25+
26+
boolean[][] visited = new boolean[rows][columns] ;
27+
28+
List<Integer> list = new ArrayList<>() ;
29+
30+
for(int i=0 ; i<rows ; i++) {
31+
32+
for(int j=0; j< columns ; j++ ) {
33+
34+
if(visited[i][j] || matrix[i][j] == 0) {
35+
visited[i][j] = true;
36+
continue;
37+
}
38+
visited[i][j] = true ;
39+
int ways = riverSizesRecursion(i, j, matrix, visited) ;
40+
41+
if(ways > 0)
42+
list.add(ways) ;
43+
44+
}
45+
46+
}
47+
48+
return list;
49+
}
50+
51+
52+
53+
// Particular Single Exploration.
54+
public static int riverSizesRecursion(int row, int column, int[][] matrix, boolean[][] visited) {
55+
56+
// This function calls happens only when matrix[row][column] is equal to 1.
57+
58+
int right = 0;
59+
int size = 1;
60+
int down = 0 ;
61+
int left = 0;
62+
int up = 0 ;
63+
64+
if(row!=0) { // Up
65+
if(matrix[row-1][column] == 1 && !visited[row-1][column]) {
66+
visited[row-1][column] = true ;
67+
up = riverSizesRecursion(row-1, column, matrix, visited) ; //
68+
}
69+
}
70+
71+
72+
if(column!=0) { // Left
73+
if(matrix[row][column-1] == 1 && !visited[row][column-1]) {
74+
visited[row][column-1] = true ;
75+
left = riverSizesRecursion(row, column-1, matrix, visited) ;
76+
}
77+
}
78+
79+
80+
if(row!=matrix.length-1) { // Down
81+
if(matrix[row+1][column] == 1 && !visited[row+1][column]) {
82+
visited[row+1][column] = true ;
83+
down = riverSizesRecursion(row+1, column, matrix, visited) ; //
84+
}
85+
}
86+
87+
if(column!=matrix[0].length-1) { // Right
88+
if(matrix[row][column+1] ==1 && !visited[row][column+1]) {
89+
visited[row][column+1] = true;
90+
right = riverSizesRecursion(row, column+1, matrix, visited) ;
91+
}
92+
}
93+
94+
size = size + up + left + right + down ;
95+
96+
return size;
97+
}
98+
99+
}

0 commit comments

Comments
 (0)