LeetCode 045 跳跃游戏II

045 跳跃游戏II
题目:

给定一个非负整数数组,你最初位于数组的第一个位置。
数组中的每个元素代表你在该位置可以跳跃的最大长度。
你的目标是使用最少的跳跃次数到达数组的最后一个位置。
示例:

输入: [2,3,1,1,4]
输出: 2
解释: 跳到最后一个位置的最小跳跃数是 2。
     从下标为 0 跳到下标为 1 的位置,跳 1 步,然后跳 3 步到达数组的最后一个位置。

解题法:贪心法
这题也可以用动态规划去做,但是要报超时,所以我们只能换一种方法去AC
贪心的原理是:由一个个局部最优解->全局最优解
思路:
先用max记下num[0]的值,将第一步能走到的数组的dp都赋值为1,接下来开始判断,对于i=1…nums.length-1,如果nums[i]+i > max(即该节点能够到达比max更远的节点)
就更新max,并且把dp[max+1]…dp[nums[i]+i]更新为dp[i]+1,否则跳过。

代码:

public static int jump(int[] nums) {
        int[] dp = new int[nums.length];
        //设定一步能走的最大值
        int max =nums[0];
        //第一步能到达的地方dp赋值为1
        for (int i = 1; i 

你可能感兴趣的:(LeetCode)