首页 > 试题广场 >

跳跃游戏(一)

[编程题]跳跃游戏(一)
  • 热度指数:5339 时间限制:C/C++ 2秒,其他语言4秒 空间限制:C/C++ 256M,其他语言512M
  • 算法知识视频讲解
给定一个非负整数数组nums,假定最开始处于下标为0的位置,数组里面的每个元素代表下一跳能够跳跃的最大长度。如果能够跳到数组最后一个位置,则返回true,否则返回false。
数据范围:


示例1

输入

[2,1,3,3,0,0,100]

输出

true

说明

首先位于nums[0]=2,然后可以跳2步,到nums[2]=3的位置,再跳到nums[3]=3的位置,再直接跳到nums[6]=100,可以跳到最后,返回true   
示例2

输入

[2,1,3,2,0,0,100]

输出

false

说明

无论怎么样,都跳不到nums[6]=100的位置   
package main
import _"fmt"

/**
 * 代码中的类名、方法名、参数名已经指定,请勿修改,直接返回方法规定的值即可
 *
 * 
 * @param nums int整型一维数组 
 * @return bool布尔型
*/
func canJump( nums []int ) bool {
    n:=len(nums)
    end:=0
    for i:=0;i<n;i++{
        if end<i{
            return false
        }
        end=max(end,i+nums[i])
    }
    return true
}

func max(a,b int)int{
    if a>b{
        return a
    }
    return b
}

发表于 2023-03-07 12:05:27 回复(0)
package main

//import "fmt"

/**
 * 代码中的类名、方法名、参数名已经指定,请勿修改,直接返回方法规定的值即可
 *
 * 
 * @param nums int整型一维数组 
 * @return bool布尔型
*/
func canJump( nums []int ) bool {
    for i := len(nums) - 1; i >= 0; i-- {
        tmpNums := nums[:i + 1]
        if len(tmpNums) <= 1 {
            break
        }
        endIndex := testJump(tmpNums)
        if endIndex == -1 {
            return false
        }
        i = endIndex
    }
    return true
}

func testJump(nums []int) int {
    for i := len(nums) - 2; i >= 0; i-- {
        if nums[i] >= len(nums) - i - 1 {
            return i
        }
    }
    return -1
}
发表于 2022-07-28 09:43:00 回复(0)

问题信息

上传者:牛客301499号
难度:
2条回答 2835浏览

热门推荐

通过挑战的用户

查看代码
跳跃游戏(一)