• leetcode 55 跳跃游戏


    /**
    从i=0开始遍历,每次更新所能达到的最远距离,如果循环break之后最远距离超过len则能够到达最后一个位置;
    但是并不需要具体计算出每次需要跳到哪个台阶;如果需要找出所有可能的结果呢?
    以动态规划的思路考虑:
    i=0->len-1:
    dp[i] 为走完第i个台阶所能到达的最远位置,那么他就是在之前所能到达的最远位置和本次所能到达最远位置之间取最大值;
    即dp[i]=max(dp[i-1],nums[i]+i),且i的范围在0~l_max之间,即在能够到达的范围内更新l_max;
    
    
    
    **/
    
    class Solution {
    public:
        bool canJump(vector<int>& nums) {
            int len=nums.size();
            int l_max=0;
            for(int i=0;i<=l_max&&i<len;i++){
                l_max=max(l_max,nums[i]+i);
            }
            return l_max>=len-1;
        }
    };

     应用贪心算法:每次遍历范围为当前能达到的最远距离,如果将当前能达到的所有点全部遍历完成后,最大距离仍然没有超过终点,那么则不能到达终点;如果能到达的最大距离nums[i]+i大于当前能到的最大点t,那么更新t;

    class Solution {
    public:
        bool canJump(vector<int>& nums) {
            //贪心算法:每次在可到达范围内的点,更新能到达的最远距离,如果最终这个距离大于len则说明可以到达终点,时间复杂度O(n);
            int len=nums.size();
            if(len==0) return true;
            int t=0;
            for(int i=0;i<=t&&i<len;i++){
                t=max(t,i+nums[i]);
            }
            return t>=len-1;
        }
    };
  • 相关阅读:
    ProGuard代码混淆
    电影资源网站分享
    mvn高级构建
    BeanUtils对象属性copy的性能对比以及源码分析
    你可能用到的Spring工具类?
    搭建K8s集群
    IDEA部署Spring-boot到Docker容器
    搭建团队协作办公wiki (confluence)
    Linux中关闭SSH的DNS解析
    责任链异步处理设计模型
  • 原文地址:https://www.cnblogs.com/joelwang/p/10637661.html
Copyright © 2020-2023  润新知