45. 貪心算法 跳躍遊戲 II

45. 跳躍遊戲 II

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

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

你的目標是使用最少的跳躍次數到達數組的最後一個位置。

示例:

輸入: [2,3,1,1,4]
輸出: 2
解釋: 跳到最後一個位置的最小跳躍數是 2。
     從下標爲 0 跳到下標爲 1 的位置,跳 1 步,然後跳 3 步到達數組的最後一個位置。

說明:

假設你總是可以到達數組的最後一個位置。

 

class Solution {
public:
    int jump(vector<int>& nums) {

 /*
對於這道題目的話,首先這道題目可以看出來 假設F(x) 爲 能跳到的最遠的距離
那麼 F(x) 爲分段函數,舉個例子 
0,1,1,1,2,2,2,2,3,3,3,3,3,4,4,4,4
第 0個格子只需要 0步就可以跳的到;
第 1到3 個格子需要1 步就可以跳的到
第4 到7 個格子可以兩個步驟就可以跳的到

 */


        int left =0; //因此在這裏我們利用一個區間搜索的形式來進行搜索 left左邊界,right 右邊界
        int right =0;
        int temp =0;
        if(nums.size() ==1){
            return 0;
        }
        while (left <=right){//最開始的時候 leftleft==right==0
             int max_dist =0; //最開始的時候我們利用一個變量來代表當前區間內最遠能到的距離
             for(int i=left;i<=right; i++){
                 max_dist = max(max_dist, nums[i] + i);
             }

             left = right +1;//在這裏不斷地更新左邊界和右邊界;
             right = max_dist;
             temp ++;//步數 +1
             if(right >= (int) nums.size()-1) {
                 break;//當最後的數據已經在我們當前區間能到達的最遠範圍的時候,就停止,用 break;
             }  
        }
        return temp;

    }
};

//加油,加油,Try to make yourself more excellent...

 

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