Leecode45.跳跃游戏II

主要思路:要想跳跃次数最少,就需要我们每次跳跃距离尽可能大
正向查找有可能i+nums[i]所在位置数组值为0,我们需要进一步判断;
为了把问题简化我们直接反向查找;
pos为我们想要到达的位置;
我们只需要从左往右遍历(遍历i到pos之间的元素)
第一个满足i+nums[i]>=pos,跳跃的距离是最远的;
再把pos移动到i所在位置,直至pos==0;
则说明数组遍历完毕;
int jump(int* nums, int numsSize){
int pos=numsSize-1;//需要到达的位置
int i,count=0;//count用来计数算加了多少次
while(pos>0)
{
for(i=0;i<pos;i++)
{
if(i+nums[i]>=pos)//找出离pos最远且能够到达pos的位置
{
pos=i;
count++;
break;
}
}
}
return count;
}
这篇博客详细介绍了LeetCode第45题的解决方案,即跳跃游戏II。作者提出了一个反向查找的策略,通过从目标位置开始向左遍历,找到能到达目标位置的最远跳跃,并更新目标位置,从而达到最小跳跃次数。这种方法简化了问题,减少了计算复杂性。博客内容着重于算法思想和代码实现,适合对算法和动态规划感兴趣的读者。
293

被折叠的 条评论
为什么被折叠?



