题目:给定一个非负整数数组,你最初位于数组的第一个位置。数组中的每个元素代表你在该位置可以跳跃的最大长度。判断你是否能够到达最后一个位置。
解题思路:从后往前,数组的倒数第二个元素(l-1)开始,如果能够到达最后一个元素(l)就截断,然后剩下的数组重复此过程。可以预知:如果能够到达最后一个位置,那么整个数组一定能够截取完,即最后l=0,时间复杂度O(n)。
func canJump(nums []int) bool {
var l = len(nums) - 1
for i := l-1; i >= 0; i-- {
if nums[i]+i >= l {
l = i
}
}
return l == 0
}