45. Jump Game II(跳跃游戏II)

原题链接:https://leetcode.com/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;
    }
}

猜你喜欢

转载自blog.csdn.net/God_Mood/article/details/87966298