class Solution: def findFarmland(self, land: List[List[int]]) -> List[List[int]]: m, n = len(land), len(land[0]) min_r, min_c, max_r, max_c = 0, 0, 0, 0 seen = set() result = [] def dfs(r, c): nonlocal min_r, min_c, max_r, max_c if (r, c) in seen or land[r][c] != 1: return seen.add((r, c)) min_r, min_c = min(r, min_r), min(c, min_c) max_r, max_c = max(r, max_r), max(c, max_c) for nr, nc in [(r + 1, c), (r - 1, c), (r, c + 1), (r, c - 1)]: if 0 <= nr < m and 0 <= nc < n and land[nr][nc] == 1: dfs(nr, nc) for r in range(m): for c in range(n): if (r, c) not in seen and land[r][c] == 1: min_r, min_c, max_r, max_c = r, c, r, c dfs(r, c) result.append([min_r, min_c, max_r, max_c]) return result Complexity Time: O(n) Space: O(n) Notes In a given group or hectare according to problem description, the top-left corner will always be min(hectare coordinates) and bottom-right will always be max(hectare coordinates).