LeetCode-55-Jump-Game

LeetCode-55-Jump-Game

Given an array of non-negative integers, you are initially positioned at the first index of the array. Each element in the array represents your maximum jump length at that position. Determine if you are able to reach the last index.

For example:

A = [2,3,1,1,4], return true.

A = [3,2,1,0,4], return false.

由題可知,數組的位置表示從該位置可以像前跳的步數,看最終能否跳到結尾。乍一看,這像是一個動態規劃的問題,dp數組內存儲每一個位置能夠走的最遠的位置,但是仔細一想,又是沒有必要的,因爲最終的目的不是爲了判斷哪一個位置能走的更遠,而是能否到達最後一個位置。 能到達最後一個位置的必要條件,顯然一個就是能從某一位置繼續往前走,而不會斷。例如:[3,2,1,0,4],我們都能走到第4個位置,但是卻無法繼續往前走,故到不了最後一個。所以代碼可以做一個判斷。 另一個需要考慮的問題是:在從前往後遍歷的過程中,維護哪一個變量?顯然這個變量記錄的是我們能走的最遠的距離,如果這個距離走的更遠就更新,直到不能繼續往前走,此時判斷能否到終點。

貼上代碼:

class Solution {
public:
    bool canJump(vector<int>& nums) {
        int i=0;
        for(int reach=0;i<nums.size()&&i<=reach;++i)
            reach=max(reach,i+nums[i]);
        return i==nums.size();
    }
};
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章