LeetCode 跳躍遊戲

2021-10-04 17:56:25 字數 1954 閱讀 5339

題目:跳躍遊戲

給定乙個非負整數陣列,你最初位於陣列的第乙個位置。

陣列中的每個元素代表你在該位置可以跳躍的最大長度。

判斷你是否可以到達最後的位置。

示例:

輸入: [2,3,1,1,4]

輸出: true

解釋: 我們可以先跳 1 步,從位置 0 到達 位置 1, 然後再從位置 1 跳 3 步到達最後乙個位置。

answer1

本程式執行思路

if

(position == nums.length -1)

if

(canjumpposition

(nextpostion,nums)

)

code

class

solution

public

boolean

canjumpfrompostion

(int postion,

int nums)

int furthestjump = math.

min(postion + nums[postion]

,nums.length -1)

;for

(int nextpositon = position +

1; nextposition <= furthjump;nextpostion++)}

return

false;}

}

answer2:自頂向下的動態規劃

優化回溯演算法

利用乙個記錄陣列memo進行記錄,優化遞迴。

步驟

code

enum index

public

class

solution

int furthestjump = math.

min(position + nums[position]

,nums.length-1)

;for

(int nextposition = position +

1; nextposition <= furthestjump;nextposition++)}

memo[position]

= index.bad;

return

false;}

public

boolean

canjump

(int

nums)

memo[memo.length-1]

= index.good;

return

canjumpfromposition(0

,nums);}

}

answer3:自底向上的動態規劃

自底向上和自頂向下動態規劃的區別就是消除了回溯,在實際使用中,自底向上的方法有更好時間效率。我們從右邊開始動態規劃,每次查詢右邊節點的資訊,都是已經計算過的,不再需要額外的遞迴開銷。

code

enum index

public

class

solution

memo[memo.length -1]

= index.good;

for(

int i=numslength -

2;i>=

0;i--)}

}return memo[0]

== index.good;

}}

LeetCode 跳躍遊戲

給定乙個非負整數陣列,你最初位於陣列的第乙個位置。陣列中的每個元素代表你在該位置可以跳躍的最大長度。判斷你是否能夠到達最後乙個位置。示例 1 輸入 2,3,1,1,4 輸出 true 解釋 從位置 0 到 1 跳 1 步,然後跳 3 步到達最後乙個位置。示例 2 輸入 3,2,1,0,4 輸出 fa...

leetcode 跳躍遊戲

給定乙個非負整數陣列,你最初位於陣列的第乙個位置。陣列中的每個元素代表你在該位置可以跳躍的最大長度。判斷你是否能夠到達最後乙個位置。示例 1 輸入 2,3,1,1,4 輸出 true 解釋 我們可以先跳 1 步,從位置 0 到達 位置 1,然後再從位置 1 跳 3 步到達最後乙個位置。示例二 輸入 ...

leetcode跳躍遊戲

1.從後往前遍歷 設陣列長度len a.size 該題判斷能否到達最後乙個位置即len 1。1 開始時,設目標點為len 1,從倒數第二個元素開始往前遍歷,即從len 2,當前元素到目標點的距離為n,初始為n 1,因為倒數第二個到倒數第乙個只需要一步,2 判斷a len 2 的值是否大於n,如果大於...