给定一个非负整数数组 nums ,你最初位于数组的 第一个下标 。
数组中的每个元素代表你在该位置可以跳跃的最大长度。
判断你是否能够到达最后一个下标。
示例 1:
输入:nums = [2,3,1,1,4] 输出:true 解释:可以先跳 1 步,从下标 0 到达下标 1, 然后再从下标 1 跳 3 步到达最后一个下标。 示例 2:
输入:nums = [3,2,1,0,4] 输出:false 解释:无论怎样,总会到达下标为 3 的位置。但该下标的最大跳跃长度是 0 , 所以永远不可能到达最后一个下标。
来源:力扣(LeetCode) 链接:leetcode.cn/problems/ju… 著作权归领扣网络所有。商业转载请联系官方授权,非商业转载请注明出处。
思路
- 当时想的是从后向前进行查找,但是想了想感觉复杂度会很高,比如 【2,3,1,1,4】 这个例子, 我的想法是从后向前分别走 4,3,2,1距离,但是这又会导致一个问题,就是到达新位置后又要重复这一步骤 复杂度很高 //todo 有时间算一下复杂度
- 官方题解是正向向后加,即下表加数组内容, i + 【i】判断这个格子最远可达的距离, 如果这个距离的最大值大于数组长度, 那么就可以到达
- 官方题解没有go语言版的,我利用简单的遍历数组进行实现,代码如下
代码
func canJump(nums []int) bool {
max := nums[0]
le := len(nums) - 1
for i, j := range nums {
if max < i+j && max >= i {
max = i + j
}
}
return max >= le
}