LeeCode每日一题:跳跃游戏||++贪心算法

引言

贪心算法其实跟我之前对旋转图像的局部思想异曲同工,大体意思就是在每一个局部范围内做到最好,那么对于一个整体来说就是好的。本题就是一个典型的贪心算法题目,找到了方向我们接下来最重要的便是把这个局部范围找到。

跳跃游戏点击查看详情

如何使用贪心算法。

作者建议是先通过多种例子寻找相似的,但是一定要找那种比较普遍的例子

输入: nums = [2,3,1,1,4]
输出: 2
这个很显然就是两次便是2——3——4.
输入: nums = [2,3,0,1,4]
输出: 2
这个同样也是2——3——4

那我们通过题目的要求得知每个数组内的数字代表这一个点最多能跳的距离,意思是参考上面的例子第一位代表从开始的点最多只能跳到第一个1的位置,那么这就是第一个贪心算法的范围。
我们接着往下推,对于第一个点的范围,很明显3的位置是能够跳更远的,而相较于第一个1的位置却只能跳到第二个1,所以说这时贪心算法的范围就要变化了,就会因为3,最大的跨越范围到达了4。就此程序结束。
有兴趣的朋友可以根据这种方式推一下其他例子。

那么下面展示一下它的代码形式

package 有效括号.跳跃游戏;
import java.util.Scanner;
public class Test {
    public static void main(String[] args) {
        Scanner sc=new Scanner(System.in);
        int []nums=new int[5];
        for (int i = 0; i < 5; i++) {
            nums[i]=sc.nextInt();
        }
        int maxlength=0;
        int end=0;
        int step=0;
        for (int j = 0; j < nums.length-1; j++) {
            maxlength=Math.max(maxlength,nums[j]+j);
            if(end==j)
            {
                end=maxlength;
                step++;
            }
        }
        System.out.println(step);
    }
        }

其主体思想便是通过储存一个下标所对应的范围的数所能到达的最大范围,从而不断扩大它的结尾指针所做成的。

总结

贪心算法最重要的便是找到一个合理的作用范围,并且是可变的,从而影响到整体的效果。

你可能感兴趣的:(LeeCode每日一题:跳跃游戏||++贪心算法)