原題目:
跳躍遊戲 II
給定一個非負整數數組,你最初位於數組的第一個位置。
數組中的每個元素代表你在該位置可以跳躍的最大長度。
你的目標是使用最少的跳躍次數到達數組的最後一個位置。
示例:
輸入: [2,3,1,1,4]
輸出: 2
解釋: 跳到最後一個位置的最小跳躍數是 2。
從下標爲 0 跳到下標爲 1 的位置,跳 1 步,然後跳 3 步到達數組的最後一個位置。
說明:
假設你總是可以到達數組的最後一個位置。
解法:
這道題希望用最少的次數完成跳躍,符合貪心的思維:局部最優,不可取消
我們選擇當前能選擇的走的最遠的路徑
具體實現
遍歷數組,在遍歷過程中,
使用一個變量表示當前能一步走到的最遠點
使用一個變量記錄當前步驟中,下一步能最遠到達的點
使用一個變量表示當前走的步數
首先規定程序如何“選擇”出了最遠的步
我們在遍歷數組的過程中,記錄了當前步驟能一步到達的最遠的點,
無論我們在這個步驟中選擇下一步走哪個,我們在循環到當前能一步走到的最遠點時,我們一定能得到:走完了一步、下一步能一步到達的最遠點。
如此遍歷完數組,就得到了答案
class Solution {
public int jump(int[] nums) {
int end = 0;
int maxPosition = 0;
int steps = 0;
for(int i = 0; i < nums.length - 1; i++){
//找能跳的最遠的
maxPosition = Math.max(maxPosition, nums[i] + i);
if( i == end){ //遇到邊界,就更新邊界,並且步數加一
end = maxPosition;
steps++;
}
}
return steps;
}
}