题目:
给定一个非负整数数组 nums ,你最后位于数组的 第一个下标 。
数组中的每个元素代表你在该地位能够跳跃的最大长度。
判断你是否可能达到最初一个下标。
链接: 力扣Leetcode—中级算法—动静布局—跳跃游戏.
示例 1:
输出:nums = [2,3,1,1,4]
输入:true
解释:能够先跳 1 步,从下标 0 达到下标 1, 而后再从下标 1 跳 3 步达到最初一个下标。
示例 2:
输出:nums = [3,2,1,0,4]
输入:false
解释:无论怎样,总会达到下标为 3 的地位。但该下标的最大跳跃长度是 0 , 所以永远不可能达到最初一个下标。
标签:贪婪、数组、动静布局
思路:
- 咱们从前面往前面开始布局,能够必定的是,从最初一步到最初一步必定是能够达到的,所以bool数组的最初一个元素的值为true
- 而后是后面的一个地位,那么要计算以后地位是否可能达到最初一个地位
- 咱们只须要看从以后地位可能向后走的步数所达到的地位中是否存在可能达到最初一步的地位
- 如果存在这样的地位,那么咱们就判断以后地位可能达到最初一步,如果不存在这样的地位,那么咱们断定以后地位不能到达最初的地位
全副Go代码如下:
package mainimport "fmt"func canJump(nums []int) bool { length := len(nums) - 1 for i := length - 1; i >= 0; i-- { if nums[i]+i >= length { length = i } } return length <= 0}func main() { a := []int{2, 3, 1, 1, 4} fmt.Println(canJump(a))}
提交截图: