给定一个非负整数数组,你最初位于数组的第一个位置。
数组中的每个元素代表你在该位置可以跳跃的最大长度。
判断你是否能够到达最后一个位置。
eg1:
输入: [2,3,1,1,4]
输出: true
解释: 我们可以先跳 1 步,从位置 0 到达 位置 1, 然后再从位置 1 跳 3 步到达最后一个位置。
eg2:
输入: [3,2,1,0,4]
输出: false
解释: 无论怎样,你总会到达索引为 3 的位置。但该位置的最大跳跃长度是 0 , 所以你永远不可能到达最后一个位置。
思考:
1.首先开始时是从首个位置开始,如果首个位置的值nums[0] >= len(nums) - 1那么说明一下就可以跳到最后面
2.如果从nums[0]开始nums[0] < len(nums) - 1那么在开始到nums[0] 这个范围内,肯定是找一个最大的值,的位置进行跳跃,这样能保证在这个范围内,起跳后,达到的位置最远
3.考虑第二点,如果要找在变区间内的最大点,有点麻烦,那么我们从前往后找,每一个位置能达到的最远位置,然后,更新最远位置
4.终止条件,最远位置 >= len(nums) - 1 return True
指针 == 最远位置 return False
class Solution(object):
def canJump(self, nums):
"""
:type nums: List[int]
:rtype: bool
"""
len_nums = len(nums)
max_step = 0
for step in range(len_nums):
if step > max_step:
return False
max_step = max(step + nums[step],max_step)
if max_step >= len_nums - 1:
return True