題目
給定一個非負(fù)整數(shù)數(shù)組档插,你最初位于數(shù)組的第一個位置。
數(shù)組中的每個元素代表你在該位置可以跳躍的最大長度。
判斷你是否能夠到達(dá)最后一個位置非区。
示例1:
輸入: [2,3,1,1,4]
輸出: true
解釋: 我們可以先跳 1 步,從位置 0 到達(dá) 位置 1, 然后再從位置 1 跳 3 步到達(dá)最后一個位置盹廷。
示例2:
輸入: [3,2,1,0,4]
輸出: false
解釋: 無論怎樣征绸,你總會到達(dá)索引為 3 的位置。但該位置的最大跳躍長度是 0 俄占, 所以你永遠(yuǎn)不可能到達(dá)最后一個位置管怠。
解析:
- 根據(jù)貪心的策略,記錄可以跳躍的最遠(yuǎn)位置缸榄,是為最優(yōu)解渤弛。
- 遍歷至數(shù)組倒數(shù)第二個索引,在遍歷中當(dāng)前索引位置
可以跳躍的最遠(yuǎn)長度
是否大于當(dāng)前記錄的最遠(yuǎn)跳躍位置
甚带,若可以則更新可以跳躍的最遠(yuǎn)長度
她肯。 - 判斷最終
可以跳躍的最遠(yuǎn)長度
是否大于等于當(dāng)前數(shù)組最后位置的索引(也就是數(shù)組長度-1)。
復(fù)雜度分析:
時間復(fù)雜度:
空間復(fù)雜度:
代碼
bool canJump(int* nums, int numsSize){
int maxLength = 0;
for (int i = 0; i <numsSize - 1;i++){
if(i <= maxLength){
if(maxLength < i + nums[i]){
maxLength = i + nums[i];
}
}
}
return maxLength >= numsSize - 1;
}