題目
給定一個非負整數(shù)數(shù)組,你最初位于數(shù)組的第一個位置。
數(shù)組中的每個元素代表你在該位置可以跳躍的最大長度。
判斷你是否能夠到達最后一個位置。
示例1:
輸入: [2,3,1,1,4]
輸出: true
解釋: 我們可以先跳 1 步,從位置 0 到達 位置 1, 然后再從位置 1 跳 3 步到達最后一個位置。
示例2:
輸入: [3,2,1,0,4]
輸出: false
解釋: 無論怎樣,你總會到達索引為 3 的位置。但該位置的最大跳躍長度是 0 , 所以你永遠不可能到達最后一個位置。
解析:
- 根據(jù)貪心的策略,記錄可以跳躍的最遠位置,是為最優(yōu)解。
- 遍歷至數(shù)組倒數(shù)第二個索引,在遍歷中當前索引位置
可以跳躍的最遠長度
是否大于當前記錄的最遠跳躍位置
,若可以則更新可以跳躍的最遠長度
。 - 判斷最終
可以跳躍的最遠長度
是否大于等于當前數(shù)組最后位置的索引(也就是數(shù)組長度-1)。
復雜度分析:
時間復雜度:
空間復雜度:
代碼
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;
}