55. 跳跃游戏
55. 跳跃游戏
代码一
func canJump(nums []int) bool {
jumpMap := make(map[int]struct{}, 0)
jumpMap[0] = struct{}{}
for i := 0; i < len(nums); i++ {
if _, ok := jumpMap[i]; !ok {
continue
}
if nums[i]+i+1 >= len(nums) {
return true
}
for j := 1; j <= nums[i]; j++ {
jumpMap[i+j] = struct{}{}
}
}
return false
}
Note
执行用时分布
1145ms
击败5.13%
执行时间很长,但是能通过
代码二 - 贪心
func canJump(nums []int) bool {
maxReachNum := 0
for i := range nums {
// 如果最大值已经超过了最大索引,那么直接返回
if maxReachNum >= len(nums)-1 {
return true
}
if i > maxReachNum {
return false
}
maxReachNum = max(maxReachNum, i+nums[i])
}
return true
}
维护一个最大可以到达的最大值,如果 i 比这个值大,那么就代表,无法继续往后走了
本站总访问量次 本站访客数人次 本文总阅读量次