Leetcode力扣45題 跳躍遊戲 II

原題目:

跳躍遊戲 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;
}
}
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章