题目:跳跃游戏
给你一个非负整数数组 nums
,你最初位于数组的 第一个下标 。数组中的每个元素代表你在该位置可以跳跃的最大长度。
判断你是否能够到达最后一个下标,如果可以,返回 true
;否则,返回 false
。
题解:遍历每个元素,找到可以到达的最远距离,如果最远距离大于等于最后一个元素的位置,即为能够到达最后一个下标
关键点1:无需遍历最后一个元素,其取值对结果不影响
关键点2:如果可以到达的最远距离小于当前遍历的位置,即当前的位置不可达,其前1个位置的取值为0,遍历其下1个位置即当前位置就大于之前可以到达的最远位置,例如下面的例子,可以达到的最远距离为1(取值为0),遍历下一个位置2(取值为4),位置2大于最远距离。
nums = [1,0,4,1]
代码实现:
class Solution:
def canJump(self, nums: List[int]) -> bool:
i = 0
reach_longest_dis = 0
while i < len(nums) - 1:
if i > reach_longest_dis:
return False
reach_longest_dis = max(reach_longest_dis,i + nums[i])
i += 1
return reach_longest_dis >= len(nums) - 1