Leetcode練習 #55 Jump Game


算法簡述:給定一個非負整數序列,數字所在位置代表“層數”,數字本身代表在對應層數所能跳躍的“最高層數”。題目所問的是能否到達目標層,但是我們可以換一個等價的說法:所能到達的最高層數是否大於或等於所給定的目標層數。

       題意分析到這裏,我們可以看出,在每次進行“跳躍”的決策時,選擇的局部最優解可以達到全局最優解,因爲可跳躍至NM層時,若N>M,因爲可以跳躍到1~N的任意層數,則M所蘊含的所有必定解均在N的解中,即此題我們可以利用貪心算法。而局部最優的做法是,選擇“可躍至的層數”加上“該層數可躍至的最高層”的最大值。舉例子:

序列  2    3    4    1   2 ……….  

分別代表前5層的情況,每層的數字代表可跳躍的層數,我們從第1層開始分析

(1)  1層的數字爲”2”,即可跳躍到第2層或者第3

(2)  2層數字爲3,即總共可跳躍高1+3=4層;

3層數字爲4,即總共可跳躍高2+4=6層;

(3)  根據貪心決策,我們選擇跳躍到第2層而不是第2

 

下面附上代碼


class Solution {
public:
    bool canJump(vector<int>& nums) {
        int pos=0;
        int temp=0;
        int j=0;
        while(nums[pos]!=0 && pos<nums.size()){
            temp=0;
            j=0;
            for(int i=0;i<nums[pos];i++){
                

                if(nums[pos+i+1]+i>=temp){
                    temp=nums[pos+i+1]+i+1;
                    j=i+1;
                    
                }

                if(pos+j+nums[pos+j]>=nums.size())
                    break;
            }
            pos+=j;
        }
        
        return (pos+nums[pos])>=nums.size()-1;
    }
};

題目鏈接:https://leetcode.com/problems/jump-game/description/


發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章