首页 > 其他 > 详细

LeetCode T45.Jump Game Ⅱ/跳跃游戏Ⅱ

时间:2020-05-04 10:26:04      阅读:54      评论:0      收藏:0      [点我收藏+]

技术分享图片

 

 本题的要求是返回跳跃的最小步数,在跳跃中能够跳的最大位置为数组中该位置所对应的元素的值,即在上面例子中nums[0]能够跳跃的最大步数为两步即从nums[0]可以跳跃到nums[1]或nums[2]。

这里显然我们需要尽可能地选择跳跃步数最大的跳跃方式,跳跃之后记录该跳跃的位置,在当前位置 i 和上一次跳跃的最大位置 end 之间寻找下一步最大的跳跃值(记录maxPosition),这样做是符合贪心算法以每一小步的最有最终得到全局最优。而从数组的首端开始道最终结束,我们仅仅只循环了一次,因此其时间复杂度为O(n),变量为常数个,空间复杂度为O(1)。

我的代码如下,leetcode上运行时间8ms,内存占用6.7MB

int jump(int* nums, int numsSize){
    int steps=0,end=0,maxPosition=0;
    for(int i=0;i<numsSize-1;i++){
        maxPosition=maxPosition>(i+nums[i])?maxPosition:(i+nums[i]);
        if(i==end){//记录上一步的最远位置,i到end之间便是上面maxPositioin试跳跃择优的过程
            end=maxPosition;
            steps+=1;
        }
    }
    return steps;
}

 

LeetCode T45.Jump Game Ⅱ/跳跃游戏Ⅱ

原文:https://www.cnblogs.com/runsdeep/p/12825213.html

(0)
(0)
   
举报
评论 一句话评论(0
关于我们 - 联系我们 - 留言反馈 - 联系我们:wmxa8@hotmail.com
© 2014 bubuko.com 版权所有
打开技术之扣,分享程序人生!