詳解跳躍遊戲

2021-09-28 23:15:39 字數 910 閱讀 5500

題目描述:給定乙個非負整數陣列,你最初位於陣列的第乙個位置。陣列中的每個元素代表你在該位置可以跳躍的最大長度。判斷你是否能夠到達最後乙個位置。

示例 1: 輸入: [2,3,1,1,4]           輸出: true

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

示例 2:輸入: [3,2,1,0,4]            輸出: false

解析:本題的意思就是要讓我們移動到最後乙個元素上,那麼我們應該怎樣才能移動到最後乙個元素呢?

想要移動到最後乙個元素,我們就得一步一步走;所以我們一定要從第一位開始走,而往往第一位的步數並不能保證我們可以直接走到最後一位,所以中間肯定要借助其他位的步數。

所以我們可以這樣想,如果第一位元素可以移動到乙個可以移動到最後一位元素的位置那麼就說明第一位元素可以完成任務。

比如:2,3,1,1,4; 我們想從第一位移動到第二位但是我們發現第一位只可以走兩步,並不能滿足要求;所以我們就需要借助第一位的兩步走到乙個可以達成任務的位置,所以我們發現第二位有三步可以走,剛好可以完成任務,所以就有我們可以先跳 1 步,從位置 0 到達 位置 1, 然後再從位置 1 跳 3 步到達最後乙個位置。

上面就是我們該題的中心思想;利用我們當前的步數走到下乙個可以完成任務的位置

在下圖中如果改位置可以到達最後的位置我們使用ttue表示,否則使用false表示;分別以示例1和示例2為例。

所以我們只需要從後往前遍歷,只需要判斷每個位置加上改位置的步數是否能走到最近的乙個true即可。 

時間複雜度o(n);

空間複雜度o(n);

**鏈結在此

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 ...