秋招算法备战第32天 | 122.买卖股票的最佳时机II、55. 跳跃游戏、45.跳跃游戏II

chatgpt/2023/9/27 6:50:58

122. 买卖股票的最佳时机 II - 力扣(LeetCode)

通过做差可以得到利润序列,然后只要利润需求的非负数求和就可以,因为这里没有手续费,某天买入之后买出可以等价为这几天连续买入卖出

class Solution:def maxProfit(self, prices: List[int]) -> int:profit = 0for i in range(1, len(prices)):profit += max(prices[i]-prices[i-1], 0)return profit

55. 跳跃游戏 - 力扣(LeetCode)

这是一个常见的贪心算法问题。我们从数组的第一个元素开始,保持跟踪我们能到达的最远的下标。然后,我们迭代数组中的每个元素,并更新我们能到达的最远下标。如果我们能到达的最远下标大于或等于数组的长度,我们就知道我们可以到达数组的最后一个元素。以下是Python语言实现此算法的代码:

def canJump(nums):max_jump = 0for i, num in enumerate(nums):if i > max_jump:return Falsemax_jump = max(max_jump, i + num)return True

这个函数的工作原理是这样的:

  • max_jump 记录了在迭代过程中可以跳到的最远的下标。
  • enumerate(nums)会遍历数组并且返回每个元素的索引i和值num。
  • 如果当前索引i超过了我们可以跳到的最远的下标,那么我们就返回False,因为我们不能到达当前索引。
  • 否则,我们更新 max_jump 的值,为当前的 max_jumpi + num 中较大的一个。这是因为,从索引i我们可以跳到的最远的下标是 i + num

然后,如果我们没有提前返回False,那么在遍历完数组后,我们就返回True,因为我们可以到达数组的最后一个元素。

45. 跳跃游戏 II - 力扣(LeetCode)

这个问题也是一个贪心算法问题,与跳跃游戏 I 的问题相似,但是我们现在需要找出到达最后一个下标的最小跳跃次数。

我们可以追踪当前位置的最大跳跃范围,并将其与最大跳跃范围内的所有位置的最大跳跃范围进行比较。我们可以保留最大跳跃范围的索引,然后当当前位置到达或超过当前的最大跳跃范围时,我们更新最大跳跃范围并将跳跃次数加1。

以下是Python语言实现此算法的代码:

def jump(nums):n, max_reach, steps, end = len(nums), 0, 0, 0for i in range(n - 1):max_reach = max(max_reach, i + nums[i])if i == end:end = max_reachsteps += 1return steps

这个函数的工作原理是这样的:

  • max_reach 记录了在迭代过程中可以跳到的最远的下标。
  • steps 记录了跳跃的次数。
  • end 记录了当前的最大跳跃范围。
  • 如果当前索引i等于当前的最大跳跃范围,那么我们更新 end 的值为 max_reach,并且 steps 加1,因为我们需要跳跃到新的位置。

总结

Summary

📈 通过贪心算法解决股票买卖和跳跃游戏问题。

Facts

  • 📈 买卖股票的最佳时机 II: 通过做差可以得到利润序列,然后只要利润非负数求和即可,没有手续费。
  • 🏃 跳跃游戏: 使用贪心算法,遍历数组并保持跟踪最远能到达的下标。
  • 🏃 跳跃游戏 II: 同样是贪心算法,找出到达最后一个下标的最小跳跃次数。保持最大跳跃范围并逐步更新。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.exyb.cn/news/show-5314205.html

如若内容造成侵权/违法违规/事实不符,请联系郑州代理记账网进行投诉反馈,一经查实,立即删除!

相关文章

看表情包学C语言 ——局部优先原则

🔗 【C语言趣味教程】专栏介绍👈 猛戳了解!!! Ⅰ. 作用域(Scope) 0x00 引入:什么是作用域? 变量和常量在程序中都是有作用范围的,这个范围我们称之为变量的 …

模型法在初中物理中的实例与应用

摘要:模型法是初中物理解题的重要方法,它的优点有方便快捷,易于理解等。文章通过列举模型法在初中物理解题时应用的例子,与模型法在学习与生活中的实际应用,说明了模型法可用性高,易于理解,能让…

【SpringBoot】85、SpringBoot中Boolean类型数据转0/1返回序列化配置

在 SpringBoot 中,前端传参数 0,1,后端可自动解析为 boolean 类型,但后端返回前端 boolean 类型时,却无法自动转换为 0,1,所以我们需要自定义序列化配置,将 boolean 类型转化为 0,1 1、类型对应 boolean 类型有false,true对应的 int 类型0,12、序列化配置 import com.f…

npm,yarn,pnpm

原理 npm、yarn和pnpm都是用于管理Node.js项目依赖的包管理工具,下面对它们进行详细讲解: npm(Node Package Manager): npm是Node.js的默认包管理工具,也是最早被广泛使用的。npm使用package.json文件来管…

No Silver Bullet

“No Silver Bullet” is a popular term in software engineering, originating from a famous paper titled “No Silver Bullet — Essence and Accidents of Software Engineering” written by Fred Brooks in 1986. In this paper, Brooks put forth his views on the di…

Rust- 智能指针

Smart pointers A smart pointer is a data structure that not only acts like a pointer but provides additional functionality. This “smartness” comes from the fact that smart pointers encapsulate additional logical or semantic rules, which are automaticall…

pyspark提交py文件指南

基本命令和参数 提交基本命令./bin/spark-submit \--master <master-url> \--deploy-mode <deploy-mode> \--conf <key<=<value> \--driver-memory <value>g \--executor-memory <value>g \--executor-cores <number of cores> \--…

【C++入门到精通】C++入门 —— 类和对象(初始化列表、Static成员、友元、内部类、匿名对象)

目录 一、初始化列表 ⭕初始化列表概念 ⭕初始化列表的优点 ⭕使用场景 ⭕explicit关键字 二、Static成员 ⭕Static成员概念 &#x1f534;静态数据成员&#xff1a; &#x1f534;静态函数成员&#xff1a; ⭕使用静态成员的优点 ⭕使用静态成员的注意事项 三、友…
推荐文章