Leetcode 跳跃游戏一和二(动态规划和贪心)

55. 跳跃游戏

只判断是否能到达边界,这个只要每次维护一个变量,看看这个变量最大到哪即可。O(N)

    public boolean canJump(int[] nums) {
        int maxRight = 0;          // 可到达右边最远的距离
        for(int i=0;imaxRight) return false;
            maxRight = Math.max(maxRight,nums[i]+i);
        }
        return maxRight>=nums.length-1;
    }

这个动态规划也比较简单,时间复杂度O(N^2)

第一步:定义状态

第二步:状态的转移

    public boolean canJump0(int[] nums) {
        // 动态规划,时间复杂度O(N^2)
        boolean []dp = new boolean[nums.length];
        for(int i=0;i

 

45. 跳跃游戏 II 

要求最小的步数,用动态规划很容易搞定。

状态的定义

状态的转移,时间复杂度O(N^2), 如何优化成O(N)

public class Solution {
    public int jumpDp(int[] nums) {
        int[] dp = new int[nums.length];
        for(int i=0;i

 

你可能感兴趣的:(算法)