跳躍遊戲
給定乙個非負整數陣列,你最初位於陣列的第乙個位置。
陣列中的每個元素代表你在該位置可以跳躍的最大長度。
判斷你是否能夠到達最後乙個位置。
示例 1:
輸入: [2,3,1,1,4]示例 2:輸出: true
解釋: 我們可以先跳 1 步,從位置 0 到達 位置 1, 然後再從位置 1 跳 3步到達最後乙個位置。 示例 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...