zoukankan      html  css  js  c++  java
  • LeetCode T45.Jump Game Ⅱ/跳跃游戏Ⅱ

     本题的要求是返回跳跃的最小步数,在跳跃中能够跳的最大位置为数组中该位置所对应的元素的值,即在上面例子中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;
    }
  • 相关阅读:
    数组常用函数
    数组游标操作
    PHP中 字符串 常用函数
    mysqli扩展库的预处理技术 mysqli stmt
    mysql的事务处理
    mysqli的增强功能
    mysql扩展库-1
    抽象类与接口
    iOS判断字符串是否包含表情字符
    iOS8 UITableView 分割条设置separator intent = 0 不起作用
  • 原文地址:https://www.cnblogs.com/runsdeep/p/12825213.html
Copyright © 2011-2022 走看看