解法一:
class Solution:
def canJump(self, nums: List[int]) -> bool:
n = len(nums)
if n == 1:
return True
elif nums[0] == 0:
return False
target_i = n - 1
i, cur = 0, 0
while i <= cur :
if i < n and cur >= target_i:
return True
if i > cur and nums[i] == 0 and cur < target_i:
return False
cur = max(cur, i+nums[i])
i += 1
return cur >= target_i
解法二:
class Solution:
def canJump(self, nums: List[int]) -> bool:
max_i = 0
for i,num in enumerate(nums):
if max_i >= i and i+num>max_i:
max_i = i+num
return max_i >= i