Skip to content

Commit c2451fa

Browse files
committed
Update: Rotting Oranges
1 parent 963cad7 commit c2451fa

File tree

1 file changed

+20
-23
lines changed

1 file changed

+20
-23
lines changed
Lines changed: 20 additions & 23 deletions
Original file line numberDiff line numberDiff line change
@@ -1,39 +1,36 @@
11
package rotting_oranges
22

33
func orangesRotting(grid [][]int) int {
4-
r, c := len(grid), len(grid[0])
5-
hasFresh, isRotten, rottens := false, false, make([]int, 0)
4+
r, c, minutes := len(grid), len(grid[0]), 0
5+
freshCount, rottens := 0, make([]int, 0)
66
for i := 0; i < r; i++ {
77
for j := 0; j < c; j++ {
8-
if !hasFresh && grid[i][j] == 1 {
9-
hasFresh = true
8+
if grid[i][j] == 1 {
9+
freshCount++
1010
} else if grid[i][j] == 2 {
1111
rottens = append(rottens, i*c+j)
1212
}
1313
}
1414
}
15-
for _, p := range rottens {
16-
i, j := p/c, p%c
17-
for k := 0; k < 4; k++ {
18-
nr, nc := i+k-1, j+k-2
19-
if k == 0 {
20-
nc += 2
21-
} else if k == 3 {
22-
nr -= 2
23-
}
24-
if 0 <= nr && nr < r && 0 <= nc && nc < c && grid[nr][nc] == 1 {
25-
grid[nr][nc], isRotten = 2, true
15+
for len(rottens) > 0 && freshCount > 0 {
16+
l := len(rottens)
17+
for _, p := range rottens {
18+
for k := 0; k < 4; k++ {
19+
i, j := p/c+k-2, p%c+k-1
20+
if k == 0 {
21+
i += 2
22+
} else if k == 3 {
23+
j -= 2
24+
}
25+
if 0 <= i && i < r && 0 <= j && j < c && grid[i][j] == 1 {
26+
grid[i][j], freshCount, rottens = 2, freshCount-1, append(rottens, i*c+j)
27+
}
2628
}
2729
}
30+
minutes, rottens = minutes+1, rottens[l:]
2831
}
29-
if !hasFresh {
30-
return 0
31-
} else if !isRotten {
32-
return -1
33-
}
34-
ans := orangesRotting(grid)
35-
if ans == -1 {
32+
if freshCount > 0 {
3633
return -1
3734
}
38-
return ans + 1
35+
return minutes
3936
}

0 commit comments

Comments
 (0)