[Swift]LeetCode55. 跳躍遊戲 | Jump Game

★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★
➤微信公衆號:山青詠芝(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 }
相關文章
相關標籤/搜索