1. 程式人生 > >LeetCode 55. Jump Game (跳躍遊戲)

LeetCode 55. Jump Game (跳躍遊戲)

mat col lean osi pub 情況 you track rip

Given an array of non-negative integers, you are initially positioned at the first index of the array.

Each element in the array represents your maximum jump length at that position.

Determine if you are able to reach the last index.

For example:
A = [2,3,1,1,4], return true.

A = [3,2,1,0,4], return false

.


題目標簽:Array

  這道題目給了我們一個array,其中每一個數字代表著可以跳躍的最大步數,讓我們判斷,能不能跳躍到最後一個數字,這裏沒有要求要剛剛好跳到最後,超過也可以。一開始自己寫了一個遞歸方法,但是因為速度慢,無法通過全是1的array。所以這道題目用Dynamic Programming方法,遍歷array,過程中,我們只需要維護一個值 - 最遠能跳躍到的地方 farthestNumIndex。對於每一個數字,我們都算一下它能最遠跳躍到哪裏,然後和 我們維護的 farthestNumIndex 比較,取大的。所以當我們知道了我們最遠能夠跳躍到哪裏的話,如果遇到了原題中的第二種可能,怎麽也跳躍不過0的這種情況,我們只需要判斷目前的數字的index i 是不是超過了 farthestNumIndex,超過了,就直接判斷為false了。 當farthestNumIndex 達到了,或者超越了最後一位數字的 index,就判斷true。

Java Solution:

Runtime beats 39.82%

完成日期:07/19/2017

關鍵詞:Array

關鍵點:Dynamic Programming - 維護一個跳躍到最遠的值

 1 public class Solution 
 2 {
 3     public boolean canJump(int[] nums) 
 4     {
 5         int farthestNumIndex = 0; // the farthest place we can jump to
 6         boolean res = false;
 7         
 8
for(int i=0; i<nums.length; i++) 9 { 10 if(i > farthestNumIndex) // meaning there is no way to jump further 11 break; 12 13 if(farthestNumIndex >= nums.length - 1) // meaning we can jump to or over the last number 14 { 15 res = true; 16 break; 17 } 18 // keep tracking the farthest spot we can jump 19 farthestNumIndex = Math.max(farthestNumIndex, i + nums[i]); 20 } 21 22 return res; 23 } 24 25 }

參考資料:

http://www.cnblogs.com/grandyang/p/4371526.html

LeetCode 算法題目列表 - LeetCode Algorithms Questions List

LeetCode 55. Jump Game (跳躍遊戲)