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

买卖股票的最佳时机 II(LeetCode 122)

❤️❤️❤️ 欢迎来到我的博客。希望您能在这里找到既有价值又有趣的内容,和我一起探索、学习和成长。欢迎评论区畅所欲言、享受知识的乐趣!

  • 推荐:数据分析螺丝钉的首页 格物致知 终身学习 期待您的关注
    在这里插入图片描述

  • 导航

    • LeetCode解锁1000题: 打怪升级之旅:每题都包括3-5种算法,以及详细的代码实现,刷题面试跳槽必备
    • 漫画版算法详解:通过漫画的形式和动态GIF图片把复杂的算法每一步进行详细可视解读,看一遍就掌握
    • python源码解读:解读python的源代码与调用关系,快速提升代码质量
    • python数据分析可视化:企业实战案例:企业级数据分析案例与可视化,提升数据分析思维和可视化能力
    • 程序员必备的数学知识与应用:全面详细的介绍了工程师都必备的数学知识

期待与您一起探索技术、持续学习、一步步打怪升级 欢迎订阅本专栏❤️❤️

题目描述

在《买卖股票的最佳时机 II》这个问题中,你拥有一个数组,其中第 i 个元素是第 i 天给定股票的价格。你可以尽可能进行多次的买卖交易(即买一次和卖一次构成一对交易)。然而,你不能同时参与多笔交易(你必须在再次购买之前出售掉之前的股票)。

任务是设计一个算法来找出最大利润。你需要考虑在哪些日子买入和卖出能够获得最大利润。

示例

给定价格数组 [7,1,5,3,6,4],最大利润计算方式如下:

  1. 在价格为1时买入,在价格为5时卖出,利润为4。
  2. 在价格为3时买入,在价格为6时卖出,利润为3。

因此,总利润为4 + 3 = 7。

注意,你不能在买入股票的同一天卖出,也不能在买入之前卖出股票。你的目标是最大化总利润。

方法一:贪心算法

解题步骤

  1. 初始化总利润为0。
  2. 遍历价格数组,从第一天到最后一天。
  3. 对于每一天,如果当天的价格比前一天高,计算这两天的利润并累加到总利润中。
  4. 最后返回总利润。

Python 示例

def maxProfit(prices):total_profit = 0for i in range(1, len(prices)):if prices[i] > prices[i - 1]:total_profit += prices[i] - prices[i - 1]return total_profit

算法分析

时间复杂度:O(n),其中 n 是价格数组的长度,因为我们需要遍历整个数组。
空间复杂度:O(1),只需要常数的空间来存储利润等变量。

算法图解

价格数组: [7, 1, 5, 3, 6, 4]
利润计算:
- 买入 1,卖出 5,利润 4
- 买入 3,卖出 6,利润 3
总利润: 4 + 3 = 7

方法二:动态规划

解题步骤

  1. 创建两个列表,cash 和 hold,其中 cash[i] 表示第 i 天结束时手上没有股票的最大利润,hold[i] 表示第 i 天结束时手上持有股票的最大利润。
  2. 初始化 cash[0] = 0 和 hold[0] = -prices[0]。
  3. 遍历从第 1 天到最后一天,更新 cash 和 hold 的值:
    • cash[i] = max(cash[i-1], hold[i-1] + prices[i])
    • hold[i] = max(hold[i-1], cash[i-1] - prices[i])
  4. 最后,cash[-1] 将是最大利润。

Python 示例

def maxProfit(prices):if not prices:return 0n = len(prices)cash, hold = [0] * n, [0] * nhold[0] = -prices[0]for i in range(1, n):cash[i] = max(cash[i-1], hold[i-1] + prices[i])hold[i] = max(hold[i-1], cash[i-1] - prices[i])return cash[-1]

算法分析

时间复杂度:O(n),我们只需要遍历一次股价数组。
空间复杂度:O(n),我们需要额外的空间来存储过程中的状态。

算法图解

价格数组: [7, 1, 5, 3, 6, 4]
cash: [0, 0, 4, 4, 7, 7]
hold: [-7, -1, -1, -1, -1, -1]
最终最大利润: 7

应用示例

如果给定一个价格数组 [7, 1, 5, 3, 6, 4],使用上述任一方法,你都能得到最大利润7。这表明无论是采用贪心策略还是动态规划方法,都可以有效地解决问题。

🌹🌹如果觉得这篇文对你有帮助的话,记得一键三连关注、赞👍🏻、收藏是对作者最大的鼓励,非常感谢 ❥(^_-)

❤️❤️作者知识有限,如有错误,请各位大佬评论区批评指正,不胜感激❥(^_-)
在这里插入图片描述

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

相关文章:

  • Spring Boot:让微服务开发像搭积木一样简单!
  • WordPress 、Typecho 站点的 MySQL/MariaDB 数据库优化
  • ==与===的区别
  • 什么是ACID及基本实现的示例
  • 【启明智显技术分享】SSD202核心板Rootfs下如何烧录mac地址
  • springboot3 集成spring-authorization-server (一 基础篇)
  • AVL树!
  • 知识付费系统怎么安装教程,教师课堂教学该掌握哪些表达技巧?
  • 基于MetaGPT的LLM Agent学习实战(一)
  • 【IMX6ULL项目】IMX6ULL上Linux系统实现产测工具框架
  • 【Linux基础】Vim保姆级一键配置教程(手把手教你把Vim打造成高效率C++开发环境)
  • Gartner发布准备应对勒索软件攻击指南:勒索软件攻击的三个阶段及其防御生命周期
  • IB 公式解析
  • 开发辅助工具的缩写
  • linux程序分析命令(一)
  • MYSQL数据库-SQL语句
  • MyBatis认识
  • 【WEEK11】 【DAY6】Employee Management System Part 7【English Version】
  • 【52】Camunda8-Zeebe核心引擎-Clustering与流程生命周期
  • 从零开始的软件测试学习之旅(八)jmeter线程组参数化及函数学习
  • 图文并茂:解析Spring Boot Controller返回图片的三种方式
  • 问题处理记录 | 表输出报错 Packet for query is too large (5,214,153 > 4,194,304).
  • 数据结构_栈和队列(Stack Queue)
  • 基于docker 的elasticsearch冷热分离及生命周期管理
  • pikachu靶场(xss通关教程)
  • 实验0.0 Visual Studio 2022安装指南
  • 数据结构之----线性表
  • thinkphp5.1 模型auto
  • 企业微信创建应用(一)
  • Cosmo Bunny Girl