1. 程式人生 > 實用技巧 >leetcode55 跳躍遊戲(Medium)

leetcode55 跳躍遊戲(Medium)

題目來源:leetcode55 跳躍遊戲

題目描述:

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

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

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

示例 1:

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

示例 2:

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

解題思路:

貪心,實時維護能跳到的最遠位置k,當遍歷到一個x,如果x大於k,那麼x不能到達,返回false,否則判斷x+nums[x]和k的大小,實時更新k。

class Solution {
public:
    bool canJump(vector<int>& nums) {
        int k=0;//當前能跳到的最遠位置
        for(int i=0;i<nums.size();i++){
            if(i>k) return false;//如果i超過能跳到的最遠距離,那麼出錯
            else k=max(k,i+nums[i]);//更新最遠距離
            if(k>=nums.size()-1) return true;//k已經大於等於最後位置,可以跳出迴圈
        }
        return true;
    }
};