給定乙個非負整數陣列,你最初位於陣列的第乙個位置。
陣列中的每個元素代表你在該位置可以跳躍的最大長度。
你的目標是使用最少的跳躍次數到達陣列的最後乙個位置。
示例:輸入: [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步到達最後乙個位置。示例 ...