1. 程式人生 > >Leetcode - 跳躍遊戲(貪心)

Leetcode - 跳躍遊戲(貪心)

https://leetcode-cn.com/problems/jump-game/

題目描述

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

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

判斷你是否能夠到達最後一個位置。

示例 1:

輸入: [2,3,1,1,4]
輸出: true
解釋: 從位置 0 到 1 跳 1 步, 然後跳 3 步到達最後一個位置。

示例 2:

輸入: [3,2,1,0,4]
輸出: false
解釋: 無論怎樣,你總會到達索引為 3 的位置。但該位置的最大跳躍長度是 0 , 所以你永遠不可能到達最後一個位置。

解題思路

貪心演算法,用MaxStep存當前跳躍的最大距離,迴圈遍歷出當前跳躍的最大距離。

#define max(a, b) a > b ? a : b
bool canJump(int* nums, int numsSize) {
    int MaxStep = nums[0];
    for (int i = 1; i < numsSize; i++) {
        if (i > MaxStep)
            return false;
        MaxStep = max(i + nums[i], MaxStep);
        if (MaxStep >= numsSize - 1)
            return true;
    }
    return MaxStep >= numsSize - 1;
}