The question is similar to Number of Islands problem https://leetcode.com/problems/number-of-islands/
public int solution(int[] A) {
int[][] matrix = vectorToMatrix(A);
int rowSize = matrix.length;
int colSize = matrix[0].length;
int territory_value; // number representing a territory e.g 4
int size = 0; // size of the biggest territory
// For every territory value, count all the neighbours you can reach from it
for (int x = 0; x < rowSize; x++) {
for (int y = 0; y < colSize; y++) {
if (matrix[x][y] != -1) {
territory_value = matrix[x][y];
size = max(size, dfs(matrix, territory_value, x, y, 0));
}
}
}
return size;
}
private int dfs(int[][] matrix, int territory_value, int x, int y, int territory_size) {
int rowSize = matrix.length;
int colSize = matrix[0].length;
if (x < 0 || y < 0 || x >= rowSize || y >= colSize || matrix[x][y] != territory_value) {
return territory_size;
}
matrix[x][y] = -1; // mark territory position as seen
++territory_size;
// Visit all neighbours
territory_size = dfs(matrix, territory_value, x + 1, y, territory_size);
territory_size = dfs(matrix, territory_value, x - 1, y, territory_size);
territory_size = dfs(matrix, territory_value, x, y + 1, territory_size);
territory_size = dfs(matrix, territory_value, x, y - 1, territory_size);
return territory_size;
}