1. 程式人生 > 其它 >刷題-力扣-45. 跳躍遊戲 II

刷題-力扣-45. 跳躍遊戲 II

45. 跳躍遊戲 II

題目連結

來源:力扣(LeetCode)
連結:https://leetcode-cn.com/problems/jump-game-ii
著作權歸領釦網路所有。商業轉載請聯絡官方授權,非商業轉載請註明出處。

題目描述

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

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

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

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

示例 1:

輸入: nums = [2,3,1,1,4]
輸出: 2
解釋: 跳到最後一個位置的最小跳躍數是 2。
    從下標為 0 跳到下標為 1 的位置,跳1步,然後跳3步到達陣列的最後一個位置。

示例 2:

輸入: nums = [2,3,0,1,4]
輸出: 2

提示:

  • 1 <= nums.length <= 104
  • 0 <= nums[i] <= 1000

題目分析

  1. 根據題目描述從陣列第一個位置跳躍到陣列最後一個位置需要的最少次數
  2. 參考力扣官方題解正向查詢可到達的最大位置

程式碼

class Solution {
public:
    int jump(vector<int>& nums) {
        int needStep = 0;
        int maxPath = 0;
        int endStep = 0;
        for (int i = 0; i < nums.size() - 1; ++i) {
            if (maxPath >= i) {
                maxPath = max(maxPath, i + nums[i]);
                if (i == endStep) {
                    endStep = maxPath;
                    ++needStep;
                }
            }
        }
        return needStep;
    }
};