当前位置: 首页 > news >正文

算法练习12——跳跃游戏

LeetCode 55 跳跃游戏

给你一个非负整数数组 nums ,你最初位于数组的 第一个下标 。数组中的每个元素代表你在该位置可以跳跃的最大长度。
判断你是否能够到达最后一个下标,如果可以,返回 true ;否则,返回 false 。

贪心

class Solution:def canJump(self, nums: List[int]) -> bool:pos = 0for idx, num in enumerate(nums):if idx > pos or pos >= len(nums) - 1:breakpos = max(pos, idx + num)return pos >= len(nums) - 1

虽然enumerate更加pythonic,但是实际测试enrmerate相比range更加耗时,不过差的很少,大概10ms左右,不影响AC

class Solution:def canJump(self, nums: List[int]) -> bool:l = len(nums)pos = 0for idx in range(l):if idx > pos or pos >= l - 1:breakpos = max(pos, idx + nums[idx])return pos >= l - 1

动态规划

看了一眼评论区,有人指出贪心实质上是动态规划,动态规划的思路如下,dp[n]为0~n位置能跳到的最远距离,所以状态转移方程为dp[n] = max(dp[n-1], dp[n-1] + nums[n]),初始值可以设置dp[0] = nums[0],一维动态规划,同时根据状态转移方程可知只涉及n和n-1,可以进行滚动优化,使用一个变量即可替代整个dp数组,由此可得解法。实质上滚动优化后动态规划思路的代码和贪心思路的代码是一致的。
果然动态规划最难的是找状态。

http://www.lryc.cn/news/187931.html

相关文章:

  • Java架构师系统架构设计服务拆分
  • 通用任务批次程序模板
  • Rust专属开发工具——RustRover发布
  • 数据结构:链表(1)
  • 软件测试之概念篇2(瀑布模型、螺旋模型、增量模型和迭代模型、敏捷模型,V模型、W模型)
  • 【【萌新的SOC学习之重新起航SOC】】
  • ElasticSearch 学习7 集成ik分词器
  • [NewStarCTF 2023 公开赛道] week1
  • ThreeJS-3D教学六-物体位移旋转
  • BC v1.2充电规范
  • 判断一个整数是否回文
  • 【广州华锐互动】车辆零部件检修AR远程指导系统有效提高维修效率和准确性
  • 简单实现接口自动化测试(基于python+unittest)
  • 【算法|双指针系列No.4】leetcode11. 盛最多水的容器
  • 数据结构全集介绍
  • 力扣刷题-字符串-反转字符串
  • 【CCNP】第七章 动态路由协议-BGP
  • java学习--day24(stream流)
  • Multi-Grade Deep Learning for Partial Differential Equations
  • Docker部署rustdesk
  • win1011安装MG-SOFT+MIB+Browser+v10b
  • PCL点云处理之Pcd文件读取、法线与曲率计算、多线程加速、属性字段合并 (二百零八)
  • JavaEE-文件IO操作
  • 二蛋赠书四期:《Go编程进阶实战:开发命令行应用、HTTP应用和gRPC应用》
  • MySQL数据库基本操作-DQL-排序查询
  • 这是一篇测试文章
  • Ubuntu plt画图 新罗马字体网格marker刻度朝内
  • flutter布局中的一些细节
  • 论文解析——AMD EPYC和Ryzen处理器系列的开创性的chiplet技术和设计
  • 第二证券:汽车产业链股活跃,恒勃股份、博俊科技“20cm”涨停