1. 程式人生 > 程式設計 >leetcode45.跳躍遊戲II

leetcode45.跳躍遊戲II

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

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

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

示例:

輸入: [2,3,1,4] 輸出: 2 解釋: 跳到最後一個位置的最小跳躍數是 2。

從下標為 0 跳到下標為 1 的位置,跳 1 步,然後跳 3 步到達陣列的最後一個位置。  
說明:

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

來源:力扣(LeetCode) 連結:leetcode-cn.com/problems/ju… 著作權歸領釦網路所有。商業轉載請聯絡官方授權,非商業轉載請註明出處。

思路:貪心演演算法,每次在可到達的區間內找到下一次能夠到達最遠的位置。

比如:{2,4}

首先在陣列的第一位和第二位之間開始找(陣列從0開始算),得到最遠位置為跳到陣列第一位(即值為3),然後在陣列第二位與第4位之間找,得出最遠位置為第四位(值為4)。

public int jump(int[] nums) {
        if(nums.length == 0 || nums == null) return  0;
        //記錄結果
        int result = 0;
        //查詢區間末尾
        int end = 0;
        //下一個查詢區間的末尾
        int nextEnd = 0;
        //由於在第0位時加一,但此時指標未跳,所以減一
        for
(int i = 0;i < nums.length-1;i++){ nextEnd = nextEnd > (nums[i] + i) ? nextEnd : (nums[i] + i); //當前查詢區間結束 if(end == i){ result++; end = nextEnd; } } return result; } 複製程式碼