zoukankan      html  css  js  c++  java
  • 055 Jump Game 跳跃游戏

    给定一个非负整数数组,您最初位于数组的第一个索引处。
    数组中的每个元素表示您在该位置的最大跳跃长度。
    确定是否能够到达最后一个索引。
    示例:
    A = [2,3,1,1,4],返回 true。
    A = [3,2,1,0,4],返回 false。
    详见:https://leetcode.com/problems/jump-game/description/

    Java实现:

    方法一:

    class Solution {
        public boolean canJump(int[] nums) {
            int n=nums.length;
            // maxJump是维护的当前能跳到的最大位置
            int maxJump=0;
            for(int i=0;i<n;++i){
            	// i>maxJump表示无法到达i的位置,失败
    			// maxJump >= (n - 1),此时的距离已经足够到达终点,成功
                if(i>maxJump||maxJump>=(n-1)){
                    break;
                }
                // nums[i]+i当前跳最远距离 maxJump为i之前跳最远距离
                maxJump=maxJump>(i+nums[i])?maxJump:(i+nums[i]);
            }
            return maxJump>=(n-1);
        }
    }
    

    方法二:

    class Solution {
        public boolean canJump(int[] nums) {
            int n=nums.length;
            // dp[i]表示当前跳跃的最大距离
            int[] dp=new int[n];
            dp[0]=nums[0];
            // i表示当前距离,也是下标
            for(int i=1;i<n;++i){
            	// i点可达
                if(i<=dp[i-1]){
                    dp[i]=dp[i-1]>(nums[i]+i)?dp[i-1]:(nums[i]+i);
                }else{
                    dp[i]=dp[i-1];
                }
            }
            return dp[n-1]>=(n-1);
        }
    }
    

    参考:https://blog.csdn.net/mine_song/article/details/69791029

  • 相关阅读:
    Python自动化运维之1、Python入门
    Github使用教程
    Windows 托盘区域显示图标
    VS 2013 打包程序教程
    UML类图简单介绍
    crontab定时任务
    软硬链接的区别和重点
    linux运维之NFS服务器配置
    怎么样让Win10可以ping通?
    VM虚拟机Linux克隆后网卡的相关操作!
  • 原文地址:https://www.cnblogs.com/xidian2014/p/8698237.html
Copyright © 2011-2022 走看看