算法-跳跃游戏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;
}