1. 程式人生 > >【LeetCode】55. 跳躍遊戲 結題報告 (C++)

【LeetCode】55. 跳躍遊戲 結題報告 (C++)

題目描述:

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

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

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

示例 1:

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

示例 2:

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

解題方案:

該題與45題相似,採用一樣的思路。

class Solution {
public:
    bool canJump(vector<int>& nums) {
        int i = 0, j = 1, n = nums.size();
        while(j < n){
            int end = min(nums[i] + i + 1, n);
            if(nums[i] == 0)    return false;
            while(j < end){
                if(nums[j] + j >= nums[i] + i )  i = j;
                j ++;
            }
            if(nums[i] + i > n) break;
        }
        return true;
    }
};