链接
题目.
难度:
middle
解答:
这个比之前那个最少需要跳跃多少步到达终点还简单了一些。只需记录每一个点到达的最远长度即可
package main
import (
"fmt"
)
func canJump(nums []int) bool {
if len(nums) <= 1 {
return true
}
dest := len(nums) - 1
mostFar := nums[0]
if mostFar >= dest {
return true
}
for i := 0; i < len(nums); i++ {
if i > mostFar {
return false
}
if reach := i + nums[i]; reach > mostFar {
if reach >= dest {
return true
}
mostFar = reach
}
}
return false
}
func main() {
fmt.Println(canJump([]int{3, 5, 1, 0, 4}))
}
复杂度分析
time
O(n)
space
O(1)
执行结果
执行用时 :8 ms, 在所有 golang 提交中击败了95.71%的用户
内存消耗 :4.2 MB, 在所有 golang 提交中击败了77.14%的用户