1. 程式人生 > 其它 >45. 跳躍遊戲 II

45. 跳躍遊戲 II

✅做題思路or感想

這一題的主要思路是利用最大可移動距離來解題,而不是模擬一個小人一步步往前跳

多的不說了,全在程式碼裡了

class Solution {
public:
    int jump(vector<int>& nums) {
        if (nums.size() == 1)return 0;	//防止奇怪的測試用例
        //cover代表的是在當前位置上走一步的最大可移動距離
        //maxCover代表的是在當前位置上走兩步的最大可移動距離
        int cover = 0, maxCover = 0;
        int step = 0;	//記錄步數
        //i代表的是在可移動範圍內的遍歷
        for (int i = 0; i <= cover; i++) {
            //時刻更新下一步能最多走多遠
            maxCover = max(maxCover, nums[i] + i);
            //如果i能到達nums.size() - 1,說明這一步的最大可移動距離已經覆蓋到了終點,可以停手了
            if (i == nums.size() - 1)break;
            //如果沒有到終點,並且還走到了當前的最大可移動距離的盡頭
            //則要支付出一個步數,來拓展最大可移動距離!
            if (i == cover) {
                cover = maxCover;
                step++;
            }
        }
        return step;
    }
};