原题链接:/problems/jump-game-ii/
这道题比较适合用贪心来做,局部的最优解最后刚好是整体的最优解。
如下图,开始的位置是 2,可跳的范围是橙色的。然后因为 3 可以跳的更远,所以跳到 3 的位置。
如下图,然后现在的位置就是 3 了,能跳的范围是橙色的,然后因为 4 可以跳的更远,所以下次跳到 4 的位置。
写代码的话,我们用 end 表示当前能跳的边界,对于上边第一个图的橙色 1,第二个图中就是橙色的 4,遍历
数组的时候,到了边界,我们就重新更新新的边界。
4ms O(n) O(1)
class Solution {public int jump(int[] nums) {if(nums.length<2)return 0;int maxPos=0,end=0,count=0;for(int i=0;i<nums.length-1;i++){maxPos=Math.max(maxPos,i+nums[i]);if(i==end){end=maxPos;count++;}}return count;}}