Faaez Razeen

Max Area of Island

  • 2 min read
  • Graph
  • LC-Medium

3 years ago

Solution

TimeSpaceExplanation
O(rc)O(rc)

Recursive

def maxAreaOfIsland(self, grid: List[List[int]]) -> int: nrows, ncols = len(grid), len(grid[0]) max_area = 0 vis = set() def get_area(r, c): if r < 0 or r == nrows or c < 0 or c == ncols or (r, c) in vis or grid[r][c] == 0: return 0 vis.add((r, c)) area = 0 for dr, dc in [(0, 1), (0, -1), (-1, 0), (1, 0)]: nr, nc = r + dr, c + dc area += get_area(nr, nc) return 1 + area for r in range(nrows): for c in range(ncols): area = get_area(r, c) max_area = max(area, max_area) return max_area

Iterative

def maxAreaOfIsland(self, grid: List[List[int]]) -> int: nrows, ncols = len(grid), len(grid[0]) visited = set() max_area = 0 def get_area(r, c): stack = [(r, c)] area = 0 while stack: r, c = stack.pop() if (r, c) not in visited: visited.add((r, c)) area += 1 for dr, dc in [(0, 1), (0, -1), (1, 0), (-1, 0)]: nr, nc = r + dr, c + dc if nr >= 0 and nr < nrows and nc >= 0 and nc < ncols and grid[nr][nc]: stack.append((nr, nc)) return area for r in range(nrows): for c in range(ncols): if grid[r][c] and (r, c) not in visited: area = get_area(r, c) max_area = max(max_area, area) return max_area