算法-跳躍遊戲II
跳躍遊戲II
跳躍遊戲II也是Leetcode上一道經典的題目,難度爲hard,其實可以暴力求解,思路是使用兩個指針,第一個指針指向初始位置,第二個指針指向i+nums[i]位置,在兩個指針間的窗口中,選擇一個nums[k]+k最大的值作爲要跳躍的位置。時間複雜度是O(N),很符合我們的直觀。
不過我們採用另一種O(N)的算法來解決這個問題
public int jump(int[] nums) {
int maxPos=0;
int bound=0;
int miniStep=0;
for(int i=0;i<nums.length;i++){
//這裏完成的就是暴力求解中的尋找跳躍點的操作了
//不過我們不需要直接跳,我們只負責記錄步數就行了
maxPos=Math.max(maxPos,nums[i]+i);
if(i==bound){
bound=maxPos;
miniStep++;
}
}
return miniStep;
}