leetcode跳跃游戏II

本文深入解析了LeetCode上的跳跃游戏II问题,对比了动态规划与贪心算法两种解决方案。动态规划虽然直观但可能因时间复杂度过高而超时,而贪心算法则提供了一种更高效的方法,通过每次选择能到达最远位置的策略来减少跳步数。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

跳跃游戏II
原来我自己的解法是:
利用最优子结构:到最后一个点步数最少的路径设为a1–ak,如果a1–ak的步数最少,那么a1–ak-1的步数也最少。
a[i]代表起点到下标为i的点的最小路径
a[i]=min{1+a[j]} ,j指i节点之前所有可以直接到达i的节点

class Solution {
    public int jump(int[] nums) {
        int n=nums.length;
        int[] a=new int[n];
        a[0]=0;
        for(int  i=1;i<n;i++) a[i]=99999999;
        for(int i=1;i<n;i++)
        {
            for(int j=0;j<i;j++)
            {
                if(nums[j]>=i-j&&a[j]+1<=a[i])
                {
                    a[i]=a[j]+1;
                }
            }
        }
        return a[n-1];
    }
}

复杂度为O(n^2)
最后一个例子老是超时。
下面是贪心法:

`class Solution {
    public int jump(int[] nums) {
        if(nums.length == 1) return 0;
        int reach = 0;
        int nextreach = nums[0];
        int step = 0;
        for(int i = 0;i<nums.length;i++){
            nextreach = Math.max(i+nums[i],nextreach);
            if(nextreach >= nums.length-1) return (step+1);
            if(i == reach){
                step++;
                reach = nextreach;
            }
        }
        return step;
    }
}
//转自leetcode优秀评论,侵删

贪心准则是:在这一步的所有能到达的距离内,下一步能到达的最远距离
我看了好久才懂。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值