小哆啦的跳跃挑战:能否突破迷宫的极限?

embedded/2025/1/18 8:10:14/

小哆啦开始力扣每日一题的第六天

https://leetcode.cn/problems/jump-game/description/

小哆啦的跳跃挑战:能否突破迷宫的极限?


第一阶段:小哆啦的初次尝试 —— 盲目跳跃

小哆啦刚进入跳跃之城,他决定采用一种非常直接的方法来解决问题——每次都跳得尽可能远。于是,他写下了第一版算法

def canJump(nums):for i in range(len(nums)):if i + nums[i] >= len(nums) - 1:return Truereturn False

在这段代码中,他做了一个简单的判断:如果当前位置加上该位置的跳跃长度大于等于终点位置,直接返回 True。但是,问题来了——这种方法过于直白,并且没有考虑到每一步的实际可行性。

第二阶段:问题的暴露 —— 无法突破迷宫

小哆啦兴冲冲地运行了第一版代码,然而,跳跃过程中的一些难题很快显现出来。

假设迷宫的数字是这样的:

nums = [2, 3, 1, 1, 4]

小哆啦的算法会错误地认为他可以直接从起点跳跃到终点,但事实上,在第四步时,他的跳跃长度不足以抵达终点。代码虽然看似简单,但其实并没有判断是否每一步的选择都是可行的。于是,他陷入了困境。

第三阶段:小哆啦的反思 —— 引入贪心算法

意识到问题后,小哆啦开始进行反思。他决定尝试一种更为有效的方法:贪心算法。具体来说,贪心算法的核心思想是:始终保持当前能够跳跃到的最远位置,直到突破终点。

他调整了代码:

def canJump(nums):max_reach = 0for i in range(len(nums)):if i > max_reach:return Falsemax_reach = max(max_reach, i + nums[i])return True

这段代码的思想是:在每一步,更新当前能够跳到的最远位置 max_reach,如果当前的位置超出了 max_reach,说明无法继续前进,返回 False。否则,继续更新最远可达位置,直到找到能够到达终点的路径。

第四阶段:算法的优化 —— 精益求精

小哆啦很高兴地发现,新的算法有效地解决了迷宫中的问题。可是,他并没有止步于此。经过深入思考,他意识到可以进一步优化他的算法,使其更加高效。他优化了代码的细节,去除了不必要的判断,改进了代码结构:

def canJump(nums):max_reach = 0for i, num in enumerate(nums):if i > max_reach:return Falsemax_reach = max(max_reach, i + num)if max_reach >= len(nums) - 1:return Truereturn False

优化后的算法不仅更加简洁,而且在发现能够到达终点时,立即返回 True,避免了不必要的计算。

第五阶段:最终的突破 —— 完美解决问题

通过这次改进,小哆啦成功地突破了跳跃之城的挑战。他的贪心算法能够精确计算每一步,确保他能够在任何情况下都能找到通向终点的路径。

# 测试案例
nums1 = [2, 3, 1, 1, 4]  # True
nums2 = [3, 2, 1, 0, 4]  # False
print(canJump(nums1))  # 输出:True
print(canJump(nums2))  # 输出:False

通过精心设计的贪心算法,小哆啦不仅成功到达了终点,还深刻理解了“最远可达”这一概念。他终于明白了,跳跃不仅需要勇气,更需要智慧和策略。


http://www.ppmy.cn/embedded/154882.html

相关文章

Redis Cluster和Sentinel模式,如何选择?

Redis Cluster和Sentinel模式,如何选择? 在实际工作中,我们使用的 Redis 高可用模式有两种:Redis Cluster 和 Redis Sentinel,那么,这两种模式有什么区别?我们该如何选择?这篇文章&…

Html5 video标签学习

<video> 标签的属性 autoplay布尔属性声明该属性后&#xff0c;视频会尽快自动开始播放&#xff0c;不会停下来等待数据全部加载完成。controls布尔属性如果存在该属性&#xff0c;浏览器会在视频底部提供一个控制面板&#xff0c;允许用户控制视频的播放。controlslist…

opencv入门基础

1.3灰度图 运行结果如下&#xff1a; 代码如下&#xff1a; import cv2 img_rgbcv2.imread("./image/cat.jpg",1) img_graycv2.imread("./image/cat.jpg",0) cv2.imshow("rgb",img_rgb) cv2.imshow("gray",img_gray) print("rg…

Asp .Net Core 实现微服务:集成 Ocelot+Nacos+Swagger+Cors实现网关、服务注册、服务发现

什么是 Ocelot ? Ocelot是一个开源的ASP.NET Core微服务网关&#xff0c;它提供了API网关所需的所有功能&#xff0c;如路由、认证、限流、监控等。 Ocelot是一个简单、灵活且功能强大的API网关&#xff0c;它可以与现有的服务集成&#xff0c;并帮助您保护、监控和扩展您的…

【SpringBoot】深度解析 Spring Boot 拦截器:实现统一功能处理的关键路径

前言 ???本期讲解关于拦截器的详细介绍~~~ ??感兴趣的小伙伴看一看小编主页&#xff1a;-CSDN博客 ?? 你的点赞就是小编不断更新的最大动力 ??那么废话不多说直接开整吧~~ 目录 ???1.拦截器 ??1.1拦截器快速入门 1.?定义拦截器 2.配置拦截器 ??1.2拦…

【Docker系列】SpringBoot 项目如何动态指定配置文件

???欢迎来到我的博客&#xff0c;很高兴能够在这里和您见面&#xff01;希望您在这里可以感受到一份轻松愉快的氛围&#xff0c;不仅可以获得有趣的内容和知识&#xff0c;也可以畅所欲言、分享您的想法和见解。 推荐:kwan 的首页,持续学习,不断总结,共同进步,活到老学到老…

使用Nginx正向代理让内网主机通过外网主机访问互联网

目录 环境概述 流程说明 在外网服务器上安装部署nginx? 安装前准备 下载nginx ?编译安装nginx 开始配置正向代理 创建systemd服务单元文件&#xff0c;用于管理Nginx服务的启动、停止和重新加载 启动nginx ?代理服务器本地验证 ?内网服务器验证 ?将代理地址添…

opencv基础学习

2.3跟踪物体颜色&#xff1a;红色为例 代码如下&#xff1a; import cv2 import numpy as np# 指定摄像头索引&#xff0c;0通常是默认摄像头 cap cv2.VideoCapture(0)while (True):ret, frame cap.read()if not ret:print("Failed to grab frame")breakhsv cv2.…