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