个人思路:一开始想用倒序,但是逻辑没想通,因此改用挨个判断
对于每一个元素,在它能到达的最远的下标之内,判断其中的每个元素能不能到numsSize-1,同时更新最远距离i+nums[i]
C
int max(int a,int b){
if(a<b){
return b;
}
return a;
}
bool canJump(int* nums, int numsSize) {
if(numsSize==1){
return true;
}
int farest = 0;
for(int i=0;i<numsSize && i<=farest;i++){
farest = max(i+nums[i], farest);
if(farest>=numsSize-1){
return true;
}
}
return false;
}
python
class Solution:
def canJump(self, nums: List[int]) -> bool:
n = len(nums)
if n==1:
return True
farest_index=0
for i in range(0,n-1):
if i<=farest_index:
farest_index = max(farest_index,i+nums[i])
if farest_index>=n-1:
return True;
return False
java
class Solution {
public boolean canJump(int[] nums) {
if(nums.length==1){
return true;
}
int farest = 0;
for(int i=0;i<nums.length && i<=farest;i++){
farest = Math.max(i+nums[i], farest);
if(farest>=nums.length-1){
return true;
}
}
return false;
}
}