add new solutions
This commit is contained in:
parent
886b5e0a8e
commit
67cad91898
47 changed files with 1549 additions and 1 deletions
48
solutions/9/q994/solution.go
Normal file
48
solutions/9/q994/solution.go
Normal file
|
|
@ -0,0 +1,48 @@
|
|||
package q994
|
||||
|
||||
func orangesRotting(grid [][]int) int {
|
||||
w, h := len(grid[0]), len(grid)
|
||||
queue := make([][3]int, 0, w+h) // row, col, minute
|
||||
nFresh, nRot := 0, 0
|
||||
|
||||
for r := range grid {
|
||||
for c := range grid[0] {
|
||||
switch grid[r][c] {
|
||||
case 1:
|
||||
nFresh++
|
||||
case 2:
|
||||
nRot++
|
||||
queue = append(queue, [3]int{r, c, 0})
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
var rot = func(r, c, minute int) {
|
||||
if r < 0 || c < 0 || r >= h || c >= w || grid[r][c] != 1 {
|
||||
return
|
||||
}
|
||||
grid[r][c] = 2
|
||||
nFresh--
|
||||
nRot++
|
||||
queue = append(queue, [3]int{r, c, minute})
|
||||
}
|
||||
|
||||
minutes := 0
|
||||
for ; len(queue) > 0; queue = queue[1:] {
|
||||
cur := queue[0]
|
||||
r, c, minute := cur[0], cur[1], cur[2]
|
||||
minutes = max(minute, minutes)
|
||||
|
||||
rot(r, c+1, minute+1)
|
||||
rot(r, c-1, minute+1)
|
||||
rot(r+1, c, minute+1)
|
||||
rot(r-1, c, minute+1)
|
||||
}
|
||||
|
||||
if nFresh == 0 {
|
||||
return minutes
|
||||
}
|
||||
return -1
|
||||
}
|
||||
|
||||
var _ = orangesRotting
|
||||
Loading…
Add table
Add a link
Reference in a new issue