代码 动态规划:
d := [3]int表示当前节点的各个跑道最少需要侧跳几次- 而当前节点的各个跑道动态转移只需要由上一个节点的各个跑道转移即可
- 最后返回三个值的最小值
func minSideJumps(obstacles []int) int {
d := [3]int{1, 0, 1}
for _, x := range obstacles[1:] {
minCnt := math.MaxInt / 2
for j := 0; j < 3; j++ {
if j == x-1 {
d[j] = math.MaxInt / 2
} else {
minCnt = min(minCnt, d[j])
}
}
for j := 0; j < 3; j++ {
if j != x-1 {
d[j] = min(d[j], minCnt+1)
}
}
}
return min(min(d[0], d[1]), d[2])
}
func min(a, b int) int {
if a > b {
return b
}
return a
}