题目:
leetcode.cn/problems/mi…
算法:
方法一:动态规划
func minSideJumps(obstacles []int) int {
sideJumps := []int{1, 0, 1}
for _, obstacle := range obstacles[1:] {
minCnt := math.MaxInt64
for k := 0; k <= 2; k ++ {
if obstacle - 1 == k {
sideJumps[k] = math.MaxInt64 / 2
} else {
minCnt = min(minCnt, sideJumps[k])
}
}
// 这里还不太好想到,容易写成丑陋代码
// 先找到n点的最小侧跳次数minCnt,然后在最小侧调次数的基础上调一次到当前位置, min(sideJumps[j] , minCnt + 1)
for j := range sideJumps {
if obstacle - 1 != j {
sideJumps[j] = min(sideJumps[j] , minCnt + 1)
}
}
}
return min(sideJumps[0], min(sideJumps[1], sideJumps[2]) )
}
func min(a, b int) int {
if a > b {
return b
}
return a
}