给定一个长度为
n
的 0 索引整数数组nums
。初始位置为nums[0]
。每个元素
nums[i]
表示从索引i
向前跳转的最大长度。换句话说,如果你在nums[i]
处,你可以跳转到任意nums[i + j]
处:
0 <= j <= nums[i]
i + j < n
返回到达
nums[n - 1]
的最小跳跃次数。生成的测试用例可以到达nums[n - 1]
。
这题可以选择用贪心算法来解,我们可以定义一个最大覆盖范围,只关心最大覆盖范围能不能包含整个数组,从局部到全局,代码如下:
func jump(nums []int) int {
cur,next:=0,0
step:=0
n:=len(nums)
for i:=0;i<=next;i++{
next=max(i+nums[i],next)
if cur==i{ //到达当前覆盖范围
if cur!=n-1{ //判断是否达到终点
step++
cur=next //重新获取最大覆盖范围
if cur>n-1{
return step //到达终点后返回步数
}
}else{
return step
}
}
}
return step
}
func max(a int,b int)int{
if a>b{
return a
}
return b
}