- class Solution:
- def jump(self, nums: List[int]) -> int:
- l=len(nums)-1
- if l==0:
- return 0
- max_reach=0
- r=0
- flag=0
- for i in range(len(nums)):
- max_reach=max(max_reach,nums[i]+i)
- if i==r:
- r=max_reach
- flag+=1
- if r>=l:
- break
- return flag
比昨天的题多考虑一下r边界值
通义解释:
为什么 jump 方法需要 end?
- 记录当前跳跃范围的边界:
end用于记录当前跳跃能到达的最远位置。当i达到end时,表示当前跳跃范围内的所有位置都已遍历完毕,需要进行下一次跳跃。 - 更新跳跃范围:每次跳跃后,更新
end为maxPos,表示新的跳跃范围。 - 增加跳跃次数:每次跳跃后,增加
step,记录跳跃次数。
为什么 canJump 方法不需要 end?
- 简化逻辑:
canJump方法只需要判断是否可以到达末尾,不需要记录每次跳跃的具体位置和次数。 - 直接判断:通过
ma记录当前能到达的最远位置,当i大于ma时,表示无法继续前进,返回False。当ma大于或等于l时,表示可以到达末尾,返回True。
总结
jump方法:需要记录每次跳跃的具体位置和次数,因此需要end来记录当前跳跃范围的边界。canJump方法:只需要判断是否可以到达末尾,不需要记录每次跳跃的具体位置和次数,因此不需要end。