貪心演算法 跳躍遊戲

2021-10-11 02:21:05 字數 1076 閱讀 1663

跳躍遊戲

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

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

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

示例 1:

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

輸出: true

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

示例 2:

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

輸出: false

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

本題是貪心演算法的經典例題,通過每一步的區域性最優解來得到全域性最優解

值得注意的是:

判斷陣列長度作第一步判斷;

max代表當前最大能到達的位置,預設值是 0 ,即從下標 0 的位置出發;

從下標 0 的位置依次訪問到終點的前乙個位置,每到乙個位置就用當前的能到達的位置 max 和 當前位置( i + nums[i]當前位置的最大步 )比較,取出最大到達位置的數,更新 max 最大到達數;

若發現當前 max < i ,即當前的最大到達位置不包括當前位置,即不能達到終點,返回false;

當走完終點前的位置,還需要判斷當前最大到達的位置 max 是否 大於或等於 終點的下標,如果大於或等於 則返回true,否則返回 false;

貪心演算法是沒有做題套路,大多數情況下只能靠自己去想思路,或者舉極端的例子去驗證是否能用貪心演算法,本道題也可以用動態規劃,但是卻沒有貪心演算法這麼巧妙。

class

solution

//包括 返回true

if(max>=nums.length-1)

return

true

;else

//遍歷到最後,如果最大值不包括最後一位 返回false

return

false;}

}

貪心演算法 跳躍遊戲

給定乙個非負整數陣列,你最初位於陣列的第乙個位置。陣列中的每個元素代表你在該位置可以跳躍的最大長度。判斷你是否能夠到達最後乙個位置。輸入 2,3,1,1,4 輸出 true 解釋 從位置 0 到 1 跳 1 步,然後跳 3 步到達最後乙個位置。輸入 3,2,1,0,4 輸出 false 解釋 無論怎...

跳躍遊戲 貪心演算法

給定乙個非負整數陣列,你最初位於陣列的第乙個位置。陣列中的每個元素代表你在該位置可以跳躍的最大長度。你的目標是使用最少的跳躍次數到達陣列的最後乙個位置。示例 輸入 2,3,1,1,4 輸出 2 解釋 跳到最後乙個位置的最小跳躍數是 2。從下標為 0 跳到下標為 1 的位置,跳 1 步,然後跳 3 步...

貪心演算法 跳躍遊戲

思路 第一反應是回溯問題,不斷窮舉nums i 可能經過的路線,但是很遺憾,執行超時了 如下,也算是提供思路吧 class solution void backtrack vector int nums,int startindex,bool flag for int i 1 i nums star...