跳跃游戏(力扣)贪心 JAVA

news/2024/11/9 9:32:24

给定一个非负整数数组 nums ,你最初位于数组的 第一个下标 。

数组中的每个元素代表你在该位置可以跳跃的最大长度。

判断你是否能够到达最后一个下标。

示例 1:

输入:nums = [2,3,1,1,4]
输出:true
解释:可以先跳 1 步,从下标 0 到达下标 1, 然后再从下标 1 跳 3
步到达最后一个下标。

示例 2:

输入:nums = [3,2,1,0,4]
输出:false
解释:无论怎样,总会到达下标为 3 的位置。但该下标的最大跳跃长度是 0 ,
所以永远不可能到达最后一个下标。

提示:

1 <= nums.length <= 3 * 10^4
0 <= nums[i] <= 105

解题思路:

在这里插入图片描述

4.题目的数据范围是10^4,显然 O(n)时间复杂度的算法比教合理

5.典型的贪心问题,核心在于当前格子能跳跃的最远距离以内的点都能作为起跳点,但我们只需记录最优距离即可

maxjump = max(maxjump , i + jump[i])

朴素代码:

class Solution {
    public boolean canJump(int[] nums) {
        int len = nums.length;
        int maxjump = 0;
        for(int i = 0; i < len; i ++) {
        	if(i > maxjump) return false;//所有起跳点都跳不到i,则返回false
        	maxjump = Math.max(maxjump, i + nums[i]);//更新
        }
        return true;
    }
}

在这里插入图片描述

优化代码:

即某个点能直接跳到最后一个点,哪就没必要继续更新了

class Solution {
    public boolean canJump(int[] nums) {
        int len = nums.length;
        int maxjump = 0;
        for(int i = 0; i < len && maxjump < len - 1; i ++) {
        	if(i > maxjump) return false;//所有起跳点都跳不到i,则返回false
        	maxjump = Math.max(maxjump, i + nums[i]);//更新
        }
        return maxjump >= len - 1;
    }
}

在这里插入图片描述

逆推代码:

无非从后往前跳,看能否跳到第一个位置。以本点前方所有点为跳台,只要能有一个点能跳到本点,那就更新 last

class Solution {
    public boolean canJump(int[] nums) {
         int n = nums.length - 1;
         int last = n;
         for(int i = n - 1; i >= 0; i --) {
        	 if(i + nums[i] >= last) last = i;
         }
         return last == 0;
    }
}

在这里插入图片描述

在这里插入图片描述

当然从后往前跳当然也是跳的越远越好,所以last会选择最小的更新


http://www.niftyadmin.cn/n/3843819.html

相关文章

如何将QQ音乐SQ品质FLAC格式转换成MP3音乐

相信腾讯公司旗下的QQ音乐大家都应该用过吧&#xff0c;QQ音乐客户端中有很多实用的功能&#xff0c;比如&#xff1a;可以将音乐传到手机上&#xff0c;可以制作铃声&#xff0c;可以自定义皮肤&#xff0c;还可以将音乐保存到腾讯微云中。当然&#xff0c;QQ音乐还可以设置音…

软件测试中的回归测试用例选择方法

回归测试就是修改完bug后对程序的新一轮测试&#xff0c;根据微软的统计&#xff0c;按照他们的经验&#xff0c;一般 开发人员解决3~4个bug会衍生出一个新的bug&#xff0c;这就是必须作回归测试的原因。 一般的软件测试流程是后期快速迭代的&#xff0c;bug在后期是快速收敛…

linux7.0内核升级

内核升级 在指定地址下载或者在线升级内核&#xff0c;要求新内核默认启动。 http://ldap.example.com/pub/kernel-3.10.0-123.1.2.el7.x86_64.rpm 最好使用命令&#xff1a; wget http://ldap.example.com/pub/kernel-3.10.0-123.1.2.el7.x86_64.rpm 注意&#xff1a;使用wget…

通过反射找到并执行方法

需求是通过传入方法的名字&#xff0c;执行该方法&#xff0c;所有的方法都是传入一个model参数&#xff0c;但model的类型不一样。 通过上网查资料&#xff0c;整理了一下&#xff0c;具体代码如下&#xff1a; /// <summary>/// 执行方法(方法类型需要是公共的)/// <…

001 内联函数

//透彻了解inlining的里里外外 //inline函数看起来像函数&#xff0c;行为像函数&#xff0c;比宏好得多&#xff0c;可以免除调用函数的开销。//过度使用inline函数&#xff0c;导致程序体积过大&#xff0c;代码膨胀导致额外的换页行为&#xff0c;降低指令高速缓存的击中率。…

兰州新区农村“三变”改革:近万农民“变身”企业工人

图为兰州新区现代农业示范园的温室大棚栽植的百合花。 魏建军 摄 图为兰州新区现代农业示范园的温室大棚栽植的百合花。 魏建军 摄 中新网兰州1月24日电(记者 魏建军)寒冬时节&#xff0c;兰州新区现代农业示范园的温室大棚里暖意融融。只身从永登古山乡来这里管理草莓大棚的王…

改善用户体验 Web前端优化策略总结

前端是庞大的&#xff0c;包括HTML、CSS、Javascript、Image、Flash等等各种各样的资源。前端优化是复杂的&#xff0c;针对方方面面的资源都有不同的方式。那么&#xff0c;前端优化的目的是什么&#xff1f;1. 从用户角度而言&#xff0c;优化能够让页面加载得更快、对用户的…

linux7.0开启IP转发功能

开启IP转发功能 cat /proc/sys/net/ipv4/ip_forward 查看IP转发功能是否开启 vim /usr/lib/sysctl.d/00-system.conf 修改其配置文件 net.ipv4.ip_forward 1 开启IP转发功能 “0”代表没有开启 sysctl -p /usr/lib/sysctl.d/00-system.conf //刷入系统