# time O(R*C) space O(1) ignoring depth of stack
class Solution:
def maxAreaOfIsland(self, grid: List[List[int]]) -> int:
max_a = 0
rows = len(grid)
cols = len(grid[0])
for i in range(rows):
for j in range(cols):
if grid[i][j] == 1:
cnt = self.dfs(i,j,grid)
max_a = max(cnt,max_a)
return max_a
def dfs(self,i,j,grid):
if i < 0 or i >= len(grid) or j < 0 or j >= len(grid[0]) or grid[i][j] != 1:
return 0
grid[i][j] = 0
res = 1
res += self.dfs(i+1,j,grid)
res += self.dfs(i-1,j,grid)
res += self.dfs(i,j+1,grid)
res += self.dfs(i,j-1,grid)
return res