题目来源:https://leetcode-cn.com/problems/jump-game-ii/description/
题目描述:
算法描述:这题是上一个题的升级版,详情请见https://blog.csdn.net/qq_39241239/article/details/82692390。
这题也是一个典型的贪心算法。每当走到一个位置index,就遍历这个位置能到达的所有位置i(index+1~index+nums[index]),遍历过程中找出这些位置能到达的最远距离max,并记录这个max对应的位置i。遍历完之后,就可以从现在的位置index走到位置i。然后如此循环~~~
代码如下:
int jump(int* nums, int numsSize) {
int step=0;//当前走的步数
int index=0;//当前位置
int p=0;//存放下一步的位置
while(index<numsSize){
//现在的位置加上该位置可以走的步数>numsSize-2,说明再走一步就能到终点。
if(index+nums[index]>numsSize-2){
return step+1;
}
int max=0; //存放下一步能到达的最远位置
//遍历当前当前位置能到达的所有位置,找出下一步能到达的最远距离
for(int i=index+1;i<=index+nums[index];i++){
if(max<i+nums[i]){
max=i+nums[i];
p=i;
}
}
step++;
index=p; //走到下一步
}
return step;
}