1. 程式人生 > >lintcode--跳躍遊戲

lintcode--跳躍遊戲

A = [2,3,1,1,4],返回 true.

A = [3,2,1,0,4],返回 false.

public class Solution {
/*
首先來看一下如何使用動態規劃求解該問題。使用動態規劃求解問題,首先需要找到問題的狀態和狀態轉化方程


假設問題的狀態,假設位置i(0≤i≤A.length)能夠跳躍的最大長度為dp[i]。 
對於陣列A = [2,3,1,1,4], 則有: 
i = 0, dp[0] = A[0] + 0 = 2 
i = 1, if dp[i-1] = dp[0]≥ i then dp[1] = max{A[1]+1,dp[0]}=4 else dp[1] = 0 
i = 2, if dp[i-1] = dp[1] ≥ i then dp[2] = max{A[2]+2,dp[1]} = 4 else dp[2] = 0


基於上面的分析,其狀態轉換方程為: 
dp[i]={max{A[i]+i,dp[i−1]},0,if dp[i−1]≥iotherwise 


注意:需要判斷能否到達第i個位置
*/
public static boolean canJump(int [] A) {
    if (A.length == 1) return true;


    int [] dp = new int[A.length];
    dp[0] = A[0];
    
    //如果dp[i-1]能走到 i  ,那麼dp[i]存的即為能走的最遠的距離
    for (int i = 1; i < dp.length; ++i) {
        //需要判斷能否到達第i個位置
        if (dp[i-1] >= i)//dp[0] >1 dp[1]>2
            dp[i] = Math.max(A[i]+i, dp[i-1]);//不斷相加//2
        else
            dp[i] = 0;
    }
    return dp[dp.length-1] >= A.length-1;
}
}


/*
貪心法【最大步數能走到當前步則每次用最遠距離更新最大步,每次判斷是否可以走到最後,可以直接返回true,如果連當前步都走不到,跳出while 返回false】


如果對上面的程式碼認真分析以下的話,是沒有必要建立dp陣列的,
可以使用一個變數來進行替換。及 
currMaxStep用來記錄從0到第i個位置中所能跳到最遠的距離。
public boolean canJump(int[] A){
    int currMaxStep =A[0];
    for(int i=1;i<A.length;i++){
        if(i>currMaxStep)return false;
        currMaxStep = Math.max(currMaxStep,A[i]+i);
    }
    return currMaxStep >=A.length-1;
}
*/


相關推薦

LintCode:跳躍遊戲 II

class Solution: # @param A, a list of integers # @return an integer def jump(self, A):

lintcode ----跳躍遊戲

法一:動態規劃   【先把A[0]加到res,如果res[i-1]能走到 i  ,那麼res[i]存的即為能走的最遠的距離(從res[i-1] 和A[i]+i)中取得】 bool canJump(v

lintcode--跳躍遊戲

A = [2,3,1,1,4],返回 true. A = [3,2,1,0,4],返回 false. public class Solution { /* 首先來看一下如何使用動態規劃求解該問題。使用動態規劃求解問題,首先需要找到問題的狀態和狀態轉化方程 假設問題的狀態,假設位置i(0≤i≤A.len

Lintcode 跳躍遊戲

給出一個非負整數陣列,你最初定位在陣列的第一個位置。    陣列中的每個元素代表你在那個位置可以跳躍的最大長度。     判斷你是否能到達陣列的最後一個位置。 樣例 A = [2,3,1,1,4],返回 true. A = [3,2,1,0,4],返回

lintcode--跳躍遊戲--跳躍遊戲

題目描述: 給出一個非負整數陣列,你最初定位在陣列的第一個位置。 陣列中的每個元素代表你在那個位置可以跳躍的最大長度。 判斷你是否能到達陣列的最後一個位置。 注意事項: 這個問題有兩個方法,一

[Lintcode]跳躍遊戲 II

給出一個非負整數陣列,你最初定位在陣列的第一個位置。 陣列中的每個元素代表你在那個位置可以跳躍的最大長度。    你的目標是使用最少的跳躍次數到達陣列的最後一個位置。 樣例 給出陣列A =

LintCode-跳躍遊戲

給出一個非負整數陣列,你最初定位在陣列的第一個位置。    陣列中的每個元素代表你在那個位置可以跳躍的最大長度。     判斷你是否能到達陣列的最後一個位置。 樣例 A = [2,3,1,1,4],返回 true. A = [3,2,1,0,4],返回 false

Lintcode 117. 跳躍遊戲 II

給出一個非負整數陣列,你最初定位在陣列的第一個位置。 陣列中的每個元素代表你在那個位置可以跳躍的最大長度。    你的目標是使用最少的跳躍次數到達陣列的最後一個位置。 public int jump(int[] A) { int count = 0; int maxPo

Lintcode : 116. 跳躍遊戲

給出一個非負整數陣列,你最初定位在陣列的第一個位置。    陣列中的每個元素代表你在那個位置可以跳躍的最大長度。     判斷你是否能到達陣列的最後一個位置。 public boolean canJump(int[] A) { // write your cod

LeetCode 55. Jump Game (跳躍遊戲

mat col lean osi pub 情況 you track rip Given an array of non-negative integers, you are initially positioned at the first index of the ar

貪心算法-跳躍遊戲

sample clu itl 判斷 main %d 數據 str 算法 給定一個非負整數數組,假定你的初始位置為數組第一個下標。 數組中的每個元素代表你在那個位置能夠跳躍的最大長度。 你的目標是到達最後一個下標,並且使用最少的跳躍次數。 例如: A=[2,3,1,1,4

LeetCode 55. 跳躍遊戲(Jump Game)

更新 你在 ron 索引 etc urn -- bre nbsp 題目描述 給定一個非負整數數組,你最初位於數組的第一個位置。 數組中的每個元素代表你在該位置可以跳躍的最大長度。 判斷你是否能夠到達最後一個位置。 示例 1: 輸入: [2,3,1,1,4] 輸

計蒜客-跳躍遊戲二 (簡單dp)

inf PE sizeof size stream 分析 數組初始化 整數 CA 題目鏈接:https://nanti.jisuanke.com/t/20

跳躍遊戲

system 更新 else 代碼 toe 輸出格式 最優 心算 pub 問題描述 給定一個非負整數數組,假定你的初始位置為數組第一個下標。 數組中的每個元素代表你在那個位置能夠跳躍的最大長度。 請確認你是否能夠跳躍到數組的最後一個下標。 例如: A=[2,3,1,1,4]

JSK 18: 跳躍遊戲

col 技術分享 hid 輸出 false algorithm top ostream color 題目描述 給定一個非負整數數組,假定你的初始位置為數組第一個下標。 數組中的每個元素代表你在那個位置能夠跳躍的最大長度。 請確認你是否能夠跳躍到數組的最後一個下標。 例如:$

[leetcode] 45. 跳躍遊戲 II(Java)(動態規劃)

com max https 重疊 http findmi 條件 leetcode scrip 45. 跳躍遊戲 II 動態規劃 此題可以倒著想。 看示例: [2,3,1,1,4] 我們從後往前推,對於第4個數1,跳一次 對於第3個數1,顯然只能跳到第4個數上,那麽從第3個數

[leetcode] 55. 跳躍遊戲

mat math num pro script length -- ble -c 55. 跳躍遊戲 分明就是45. 跳躍遊戲 II的縮水版本嘛。。??,難度高的版本居然放在了前面,把像我這種有強迫癥的必須按照題號刷題的人不放在眼裏麽。。。 class Solution {

LeetCode:跳躍遊戲【55】

style code new bsp known als fur 遊戲 solution LeetCode:跳躍遊戲【55】 題目描述 給定一個非負整數數組,你最初位於數組的第一個位置。數組中的每個元素代表你在該位置可以跳躍的最大長度。判斷你是否能夠到達最後一個位置。 示例

LeetCode 跳躍遊戲系列

i+1 clas 條件 最小 false 顯式 class [] 動態規劃 55. 跳躍遊戲 給定一個非負整數數組,你最初位於數組的第一個位置。數組中的每個元素代表你在該位置可以跳躍的最大長度。判斷你是否能夠到達最後一個位置。 示例 1: 輸入: [2,3,1,1,4] 輸

LeetCode---45.跳躍遊戲II

題目來源:https://leetcode-cn.com/problems/jump-game-ii/description/ 題目描述: 演算法描述:這題是上一個題的升級版,詳情請見https://blog.csdn.net/qq_39241239/article/details/8