go: add «2658. Maximum Number of Fish in a Grid»
URL: https://leetcode.com/problems/maximum-number-of-fish-in-a-grid/ Signed-off-by: Matej Focko <me@mfocko.xyz>
This commit is contained in:
parent
daf0a68499
commit
e6e6860da0
1 changed files with 42 additions and 0 deletions
42
go/maximum-number-of-fish-in-a-grid.go
Normal file
42
go/maximum-number-of-fish-in-a-grid.go
Normal file
|
@ -0,0 +1,42 @@
|
|||
package main
|
||||
|
||||
func findMaxFish(grid [][]int) int {
|
||||
DIRECTIONS := [][]int{
|
||||
{0, 1},
|
||||
{0, -1},
|
||||
{1, 0},
|
||||
{-1, 0},
|
||||
}
|
||||
|
||||
width, height := len(grid[0]), len(grid)
|
||||
inRange := func(y, x int) bool {
|
||||
return y >= 0 && y < height && x >= 0 && x < width
|
||||
}
|
||||
|
||||
var dfs func(int, int) int
|
||||
dfs = func(y, x int) int {
|
||||
if !inRange(y, x) || grid[y][x] == 0 {
|
||||
return 0
|
||||
}
|
||||
|
||||
// record found fish and reset to zero to mark as irrelevant
|
||||
found := grid[y][x]
|
||||
grid[y][x] = 0
|
||||
|
||||
for _, dir := range DIRECTIONS {
|
||||
dy, dx := dir[0], dir[1]
|
||||
found += dfs(y+dy, x+dx)
|
||||
}
|
||||
|
||||
return found
|
||||
}
|
||||
|
||||
foundMax := 0
|
||||
for y, row := range grid {
|
||||
for x, _ := range row {
|
||||
foundMax = max(foundMax, dfs(y, x))
|
||||
}
|
||||
}
|
||||
|
||||
return foundMax
|
||||
}
|
Loading…
Add table
Add a link
Reference in a new issue