题目描述:具体描述见原题。简单来说就是用最少步数从数组初始位置跳到末尾,数组元素代表在该位置可跳跃最大步数。
解题思路:这道题可以采用贪心思路。开始位置位于数组初始位置,假设nums[0]=m,那么需要保证(nums[n]+n)最大,其中n的取值范围是[0,m]。具体过程见代码。
具体代码:
func jump(nums []int) int {
i, maxI, count, end := 0, 0, 0, len(nums)-1
for i < end { // 跳到末位之前
if i+nums[i] >= end {
return count+1
}
next, maxNext := i+1, nums[i]+i
for next <= maxNext { // 更新maxI,确保maxI为最大值,注意这里的等号,如果忽略等号,可能会在第六个测试用例执行超时。
if next+nums[next] > maxI {
maxI, i = next+nums[next], next
}
next++
}
count++
}
return count
}
补充说明:突击了一周。论文终于送一审了hhhhh,一万分感谢瑞瑞、老马和老游,在上周给了我极大的帮助。希望一审顺利。