今日题目
https://leetcode.com/problems/maximum-number-of-fish-in-a-grid/description/
思路
求连通块的大小。
方法
遍历网格,将每个连通块中的鱼数累加,最终返回最大连通块的鱼数。
复杂度
-
时间复杂度:$O(N\times M)$,每个格子恰好访问一次。
-
空间复杂度:$O(1)$,不计原始网格占用的空间。
代码
class Solution:
def findMaxFish(self, grid: List[List[int]]) -> int:
ans = 0
dx = [0,0,1,-1]
dy = [1,-1,0,0]
for i in range(len(grid)):
for j in range(len(grid[0])):
if grid[i][j] == 0:
continue
tmp = grid[i][j]
grid[i][j] = 0
q = deque([(i,j)])
while len(q) > 0:
x,y = q.popleft()
for k in range(4):
nx = x + dx[k]
ny = y + dy[k]
if nx < 0 or ny < 0 or nx >= len(grid) or ny >= len(grid[0]) or grid[nx][ny] == 0:
continue
tmp += grid[nx][ny]
grid[nx][ny] = 0
# print(i,j,nx, ny, tmp)
q.append((nx, ny))
ans = max(ans, tmp)
print(grid)
return ans