★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★
➤微信公衆號:山青詠芝(shanqingyongzhi)
➤博客園地址:山青詠芝(https://www.cnblogs.com/strengthen/)
➤GitHub地址:https://github.com/strengthen/LeetCode
➤原文地址:http://www.javashuo.com/article/p-vromkgqm-me.html
➤若是連接不是山青詠芝的博客園地址,則多是爬取做者的文章。
➤原文已修改更新!強烈建議點擊原文地址閱讀!支持做者!支持原創!
★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★html
Given an array of non-negative integers, you are initially positioned at the first index of the array.git
Each element in the array represents your maximum jump length at that position.github
Determine if you are able to reach the last index.數組
Example 1:微信
Input: [2,3,1,1,4] Output: true Explanation: Jump 1 step from index 0 to 1, then 3 steps to the last index.
Example 2:spa
Input: [3,2,1,0,4] Output: false Explanation: You will always arrive at index 3 no matter what. Its maximum jump length is 0, which makes it impossible to reach the last index.
給定一個非負整數數組,你最初位於數組的第一個位置。code
數組中的每一個元素表明你在該位置能夠跳躍的最大長度。htm
判斷你是否可以到達最後一個位置。blog
示例 1:索引
輸入: [2,3,1,1,4] 輸出: true 解釋: 從位置 0 到 1 跳 1 步, 而後跳 3 步到達最後一個位置。
示例 2:
輸入: [3,2,1,0,4] 輸出: false 解釋: 不管怎樣,你總會到達索引爲 3 的位置。但該位置的最大跳躍長度是 0 , 因此你永遠不可能到達最後一個位置。
16ms
1 class Solution { 2 func canJump(_ nums: [Int]) -> Bool { 3 var bestPos = 0 4 5 var i = nums.count - 1 6 while (i >= 0 ) { 7 if (nums[i] + i >= bestPos) { 8 bestPos = i 9 } 10 i -= 1 11 } 12 13 return bestPos == 0 14 } 15 }
20ms
1 class Solution { 2 func canJump(_ nums: [Int]) -> Bool { 3 if nums.isEmpty { return true } 4 var ind = nums.count - 1 5 for i in (0..<nums.count).reversed() { 6 if (i + nums[i]) >= ind { 7 ind = i 8 } 9 } 10 return ind == 0 11 } 12 }
24ms
1 class Solution { 2 func canJump(_ nums: [Int]) -> Bool { 3 var maxIndex = nums[0] 4 5 for (index, val) in nums.enumerated() { 6 7 if index > maxIndex { 8 return false 9 } 10 11 maxIndex = max(maxIndex, index + val) 12 } 13 14 return true 15 } 16 }
24ms
1 class Solution { 2 func canJump(_ nums: [Int]) -> Bool { 3 let count = nums.count 4 if count > 0 { 5 var index = 1 // 如今檢查 6 var maxIndex = nums.first! // 如今最多去到 7 if maxIndex >= count - 1 { 8 return true 9 } 10 var newIndex = 0 // 新的最多去到 11 12 while index <= maxIndex { 13 newIndex = nums[index] + index 14 if newIndex > maxIndex { 15 maxIndex = newIndex 16 if newIndex >= count - 1 { 17 return true 18 } 19 } 20 index += 1 21 } 22 } 23 return false 24 } 25 }
36ms
1 class Solution { 2 func canJump(_ nums: [Int]) -> Bool { 3 var lastPos = 0 4 for (index, num) in nums.enumerated() { 5 if index > lastPos { 6 return false 7 } 8 9 lastPos = max(lastPos, num + index) 10 } 11 12 return true 13 } 14 }