給定乙個非負整數陣列,你最初位於陣列的第乙個位置。
陣列中的每個元素代表你在該位置可以跳躍的最大長度。
判斷你是否能夠到達最後乙個位置。
示例 1:
輸入: [2,3,1,1,4]
輸出: true
解釋: 我們可以先跳 1 步,從位置 0 到達 位置 1, 然後再從位置 1 跳 3 步到達最後乙個位置。
示例 2:
輸入: [3,2,1,0,4]
輸出: false
解釋: 無論怎樣,你總會到達索引為 3 的位置。但該位置的最大跳躍長度是 0 , 所以你永遠不可能到達最後乙個位置。
貪心法以題目為例 [2,3,1,1,4],陣列下標依次是a[0]=2,a[1]=3,a[3]=1…
那麼第乙個元素可以跳躍的步數為1步、2步,它可以跳1步到a[1]=3,a[3]之後可以跳1步、2步、3步,它可以跳3步直接到達陣列尾部最後元素。
[3,2,1,0,4],陣列下標依次是a[0]=3,它可以跳躍的步數為1步、2步、3步,它跳3步到達a[4]=0,之後可以跳躍的步數為0,到不了陣列最後乙個元素。
需要考慮的問題是從首元素開始,它可以跳躍的步數有很多種,應該選擇哪一步呢?
我們要選擇跳躍的步數為最大的步數,因為最大步數可以覆蓋小步數,也就是說經過小步數跳躍怎麼都可以到達最大步數跳躍的位置。
比如,元素a[0]要到達的最後位置是元素a[i],它可以跳的位置為a[1] 、a[2]、a[3]…a[i-1]、a[i].
若是此時不在第0個位置,在第i個位置,從該位置最遠可以跳躍至第j個位置,第i個位置可以跳到的位置有第i+1、i+2…、j-1、j位置。
我們要選擇的能跳的位置就是這些位置中所在元素最大可以跳躍的步數,可以跳躍到最遠的位置
若是後面元素的步數越小,則保持最大的步數,直到後面有步數大於當前步數再去更新它。
步驟:從第i位置最遠可跳躍到第a[i]位置,從第i位置最遠可跳躍nums[i]步,所以a[i]=nums[i]+1
設iump當前所在位置為0
設max_[a]:從第0位置到第jump位置過程中最遠可到達的位置,初值為max_a[0]
用jump掃瞄a陣列,直到jump到達陣列的尾部或jump超過max_a,更新max_a(也就是更新最大的步數)
jump:若jump為陣列長度,返回true,反之,false
例:a=[2,4,3,4,8,6…]
之後依次類推,不斷更新,直到陣列尾部
class
solution
int jump=0;
int max_a=a[0]
;while
(jump
size()
&&jump<=max_a)
jump++;}
if(jump==a.
size()
)return
false;}
};
Leetcode 55 跳躍遊戲 貪心
題目描述 給定乙個非負整數陣列,你最初位於陣列的第乙個位置。陣列中的每個元素代表你在該位置可以跳躍的最大長度。判斷你是否能夠到達最後乙個位置。示例 1 輸入 2,3,1,1,4 輸出 true 解釋 從位置 0 到 1 跳 1 步,然後跳 3 步到達最後乙個位置。示例 2 輸入 3,2,1,0,4 ...
LeetCode 55 跳躍遊戲(貪心)
給定乙個非負整數陣列,你最初位於陣列的第乙個位置。陣列中的每個元素代表你在該位置可以跳躍的最大長度。判斷你是否能夠到達最後乙個位置。示例 1 輸入 2,3,1,1,4 輸出 true 解釋 從位置 0 到 1 跳 1 步,然後跳 3 步到達最後乙個位置。示例 2 輸入 3,2,1,0,4 輸出 fa...
LeetCode 55 跳躍遊戲 貪心
給定乙個非負整數陣列,你最初位於陣列的第乙個位置。陣列中的每個元素代表你在該位置可以跳躍的最大長度。判斷你是否能夠到達最後乙個位置。示例 1 輸入 2 3,1 1,4 輸出 true 解釋 我們可以先跳 1 步,從位置 0 到達 位置 1 然後再從位置 1 跳 3 步到達最後乙個位置。示例 2 輸入...