演算法 貪心 回溯 跳躍遊戲2

2021-10-05 03:05:28 字數 1414 閱讀 3030

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

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

你的目標是使用最少的跳躍次數到達陣列的最後乙個位置。

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

輸出: 2

解釋: 跳到最後乙個位置的最小跳躍數是 2。

從下標為 0 跳到下標為 1 的位置,跳 1 步,然後跳 3 步到達陣列的最後乙個位置。

說明:

假設你總是可以到達陣列的最後乙個位置。

遍歷時,從首節點開始計算最遠下標,記為scope

遍歷scope內的每個節點能到達的最遠下標,並記錄最大的那個,作為備選跳躍目標

到達scope後,除了執行步驟2,還需要更新scope為步驟2中遍歷後記錄下能到達的最遠下標;同時最少跳躍數加一表示跳了一次

此時其實有兩種情況:

重複步驟2-3,直到i == nums.length -1,說明已經到達終點,返回累積結果+1即可

class

solution

// 1. 遍歷時,從首節點開始計算最遠下標,記為scope

// 2. 遍歷scope內的每個節點能到達的最遠下標,並記錄最大的那個

// 3. 到達scope後,除了執行步驟2,還需要更新scope為步驟2中遍歷後記錄下能到達的最遠下標;同時最少跳躍數加一表示跳了一次

// 此時其實有兩種情況:

// 3.1 小於scope的其他節點能跳到的最遠節點都不超過scope,則此時就直接從起點跳到scope節點即可,scope也更新為原scope節點能跳躍的最遠節點

// 3.2 小於scope的其他節點能跳到的最遠節點超過scope,則此時就從起點跳到該記錄節點,scope也更新為該節點能跳躍的最遠節點

// 4. 重複步驟2-3,直到i == nums.length -1,說明已經到達終點,返回累積結果+1即可

// 存放當前次跳到的目標位置

int scope = nums[0]

;// 存放到達終點的最少跳躍次數

int result =0;

// 記錄當前scope內節點能跳躍到最遠的下標

int max = scope;

for(

int i =

1; i < nums.length -

1; i++)if

(i == scope)

}// 此時i == nums.length -1,即到達終點,還需要從之前的節點跳過來所以+1

貪心演算法 跳躍遊戲

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

跳躍遊戲 貪心演算法

給定乙個非負整數陣列,你最初位於陣列的第乙個位置。陣列中的每個元素代表你在該位置可以跳躍的最大長度。你的目標是使用最少的跳躍次數到達陣列的最後乙個位置。示例 輸入 2,3,1,1,4 輸出 2 解釋 跳到最後乙個位置的最小跳躍數是 2。從下標為 0 跳到下標為 1 的位置,跳 1 步,然後跳 3 步...

貪心演算法 跳躍遊戲

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