1.題目描述
給你一個非負整數數組?nums
?,你最初位于數組的?第一個下標?。數組中的每個元素代表你在該位置可以跳躍的最大長度。
判斷你是否能夠到達最后一個下標,如果可以,返回?true
?;否則,返回?false
?。
示例?1:
輸入:nums = [2,3,1,1,4] 輸出:true 解釋:可以先跳 1 步,從下標 0 到達下標 1, 然后再從下標 1 跳 3 步到達最后一個下標。
示例?2:
輸入:nums = [3,2,1,0,4] 輸出:false 解釋:無論怎樣,總會到達下標為 3 的位置。但該下標的最大跳躍長度是 0 , 所以永遠不可能到達最后一個下標。
2.解題思路
遍歷數組,更新每此到達的最遠距離maxRearch,在循環內部,判斷當前數組下表是否大于能到達的最遠距離maxReach,如果大于則說明不能到達目前下標位置,所以也不可能到達最后一個下標,直接返回 false ,而如果當前maxReach大于等于數組最大下標的話,說明目前已經可以到達最后一個下標,可以直接返回 true.
3.代碼展示
func canJump(nums []int) bool {maxReach := 0for i := 0; i < len(nums); i++ {if i > maxReach {return false}maxReach = max(maxReach, i + nums[i])if maxReach >= len(nums) - 1 {return true}}return false
}