55. Jump Game

1.問題

  • 給予一個非負整數的array, 每個值表示可達的最大長度, 判斷是否能達到最後一個index

2.想法

  • 提問

  • function header, parameter

  • test input

  • 說明想法

    • 動態規劃, 由於需要判斷到最後時的剩餘步數是否>=0

    • 因此dp內所要儲存的值為到此格所剩餘的步數, 由於一開始就在0了, 因此dp[0] = 0, 之後的位置所剩下的步數為前一個所剩餘的步數 -1, 所以dp[1] = max(dp[0], num[0]) - 1;

    • 如果有dp為負數則回傳false

    • 最後判斷dp[last]是否為0

  • 測試計算複雜度

    • O(N)

3.程式碼

class Solution {
public:
    bool canJump(vector<int>& nums) {
        vector<int> remain(nums.size(), 0);
        remain[0] = 0;
        for (int i = 1; i < nums.size(); i++) {
            remain[i] = max(remain[i - 1], nums[i - 1]) - 1;
            if (remain[i] < 0) {
                return false;
            }
        }
        return true;
    }
};

Last updated