leetcode45.跳躍遊戲II
阿新 • • 發佈:2019-12-31
給定一個非負整數陣列,你最初位於陣列的第一個位置。
陣列中的每個元素代表你在該位置可以跳躍的最大長度。
你的目標是使用最少的跳躍次數到達陣列的最後一個位置。
示例:
輸入: [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;
}
複製程式碼