452,跳躍遊戲

2021-10-09 19:41:17 字數 1698 閱讀 1214

給定乙個非負整數陣列,你最初位於陣列的第乙個位置。

陣列中的每個元素代表你在該位置可以跳躍的最大長度。

判斷你是否能夠到達最後乙個位置。

示例 1:

輸入: [2,3,1,1,4]

輸出: true

解釋: 我們可以先跳 1 步,從位置 0 到達位置 1, 然後再從位置 1 跳 3 步到達最後乙個位置。

示例 2:

輸入: [3,2,1,0,4]

輸出: false

解釋: 無論怎樣,你總會到達索引為 3 的位置。但該位置的最大跳躍長度是 0 , 所以你永遠不可能到達最後乙個位置。

儲存每步所能到達的最大距離這題讓求的是能否到達最後乙個位置,我們先遍歷陣列的數字,然後儲存下來他所能跳到的最大距離,如果能到達最後乙個位置,直接返回true,如果不能到達就繼續遍歷,如果最大距離連下一步都到不了,就直接返回false。

比如第一步能跳到的最大距離是3,也就是說接下來的3個位置都是可以到達的,我們就要遍歷接下來的3個位置,並記錄這3個位置所能到達的最大距離,如果這3個位置的任何乙個位置的最大距離能到達最後乙個位置,直接返回true。

以示例2為例畫個圖來看下,第1個元素的值是3,所以接下來的3個位置都能到達,因為前3個位置所能跳到的最大距離是第4個位置,然後到第4個位置的時候,他能跳到的最大距離是0,不能到下一步了,直接返回false。

;}從後往前判斷可以逆向思維,這題說的是從前往後跳的,我們也可以從後往前來推斷,從陣列的最後第二位開始計算,如果當前的位置加上當前所能跳轉的最大距離大於等於last,說明這一步跳轉是沒問題的,是可以到達last這一步(last初值是陣列的最後乙個元素)。能走到第一步,即last等於0的時候,說明是可以從位置0跳到最後一位的。

public

boolean

canjump

(int

nums)

//如果last等於0,說明可以從第乙個位置跳到最後

return last ==0;

}

總結這題沒有什麼難度,第2種方式不太容易想到,一般更容易想到的是第一種解決方式,就是每走一步都要判斷所能跳的最大距離,如果能夠到達最後就直接返回,如果連下一步都到不了,那麼就不可能到達最後了,直接返回false,否則就在當前位置所能到達最大位置前的元素都要遍歷一遍,然後記錄下他能跳的最大距離。

LintCode 跳躍遊戲 I VS跳躍遊戲 II

陣列中的每個元素代表你在那個位置可以跳躍的最大長度。判斷你是否能到達陣列的最後乙個位置。分析 方法一 基於動態規劃的做法,時間複雜度o n 2 陣列dp i 表示能否到達下標為i的位置,對於從下標i 1開始的每乙個位置,都從下標j 0開始到i 1判斷能否到達j,並且判斷從j開始最遠能否跳到或超過i的...

LintCode Jump Game 跳躍遊戲

給出乙個非負整數陣列,你最初定位在陣列的第乙個位置。陣列中的每個元素代表你在那個位置可以跳躍的最大長度。判斷你是否能到達陣列的最後乙個位置。樣例 a 2,3,1,1,4 返回 true.a 3,2,1,0,4 返回 false.注意 這個問題有兩個方法,乙個是貪心和 動態規劃。貪心方法時間複雜度為o...

跳躍遊戲二

給定乙個非負整數陣列,假定你的初始位置為陣列第乙個下標。陣列中的每個元素代表你在那個位置能夠跳躍的最大長度。你的目標是到達最後乙個下標,並且使用最少的跳躍次數。例如 a 2,3,1,1,4 a 2,3,1,1,4 a 2,3 1,1 4 到達最後乙個下標的最少跳躍次數為 22 2。先跳躍 11 1 ...