LeetCode:买卖股票的最佳时机(1-3) - Python
121. Best Time to Buy and Sell Stock买卖股票的最佳时机问题描述给定一个数组它的第i个元素是一支给定股票第i天的价格。如果你最多只允许完成一笔交易即买入和卖出一支股票设计一个算法来计算你所能获取的最大利润。注意你不能在买入股票前卖出股票。示例 1:输入:[7,1,5,3,6,4]输出:5解释:在第 2 天股票价格 1的时候买入在第 5 天股票价格 6的时候卖出最大利润 6-1 5 。 注意利润不能是 7-1 6, 因为卖出价格需要大于买入价格。示例 2:输入:[7,6,4,3,1]输出:0解释:在这种情况下, 没有交易完成, 所以最大利润为 0。问题分析这个问题比较简单依次遍历list从遍历过的list中选择最小的一个与当前值做差并保存到maxprofit中依次更新这个maxprofit 就是最后的结果了。Python3实现# Time :2018/6/29 # Author :LiuYinxing # 解题思路 遍历数组 class Solution: def maxProfit(self, prices): minprice, maxprofit, n float(inf), 0, len(prices) for i in range(n): if prices[i] minprice: minprice prices[i] # 更新最小值 elif prices[i] - minprice maxprofit: # 与当前的最优值比较如果比之前更优则更新 maxprofit prices[i] - minprice return maxprofit if __name__ __main__: prices [7, 1, 5, 3, 6, 4] solu Solution() print(solu.maxProfit(prices))122. Best Time to Buy and Sell Stock II122. 买卖股票的最佳时机 II问题描述给定一个数组它的第i个元素是一支给定股票第i天的价格。设计一个算法来计算你所能获取的最大利润。你可以尽可能地完成更多的交易多次买卖一支股票。注意你不能同时参与多笔交易你必须在再次购买前出售掉之前的股票。示例 1:输入:[7,1,5,3,6,4]输出:7解释:在第 2 天股票价格 1的时候买入在第 3 天股票价格 5的时候卖出, 这笔交易所能获得利润 5-1 4 。 随后在第 4 天股票价格 3的时候买入在第 5 天股票价格 6的时候卖出, 这笔交易所能获得利润 6-3 3 。示例 2:输入:[1,2,3,4,5]输出:4解释:在第 1 天股票价格 1的时候买入在第 5 天 股票价格 5的时候卖出, 这笔交易所能获得利润 5-1 4 。 注意你不能在第 1 天和第 2 天接连购买股票之后再将它们卖出。因为这样属于同时参与了多笔交易你必须在再次购买前出售掉之前的股票。示例 3:输入:[7,6,4,3,1]输出:0解释:在这种情况下, 没有交易完成, 所以最大利润为 0。问题分析因为这个是不计买卖次数现在我们可以想象股票中的真正的K线如果这个线是上升状态那么相邻的两点之间一定存在梯度所以现在只要把每一个相邻的梯度大于0的梯度加起来就是最后的最优总收益把相邻的梯度相加其实也就等价于这只股票的所有上升状态的最高点与最低点的差的总和。注这里的梯度指的是相邻两个数的差不是梯度下降算法中的梯度哦。Python3实现# Time :2018/6/29 # Author :LiuYinxing # 解题思路 类似于贪心 class Solution: def maxProfit(self, prices): n, maxprofit len(prices), 0 for i in range(1, n): tmp prices[i] - prices[i - 1] if tmp 0: maxprofit tmp return maxprofit if __name__ __main__: prices [7, 1, 5, 3, 6, 4] solu Solution() print(solu.maxProfit(prices))123. Best Time to Buy and Sell Stock III123. 买卖股票的最佳时机 III问题描述给定一个数组它的第i个元素是一支给定的股票在第i天的价格。设计一个算法来计算你所能获取的最大利润。你最多可以完成两笔交易。注意:你不能同时参与多笔交易你必须在再次购买前出售掉之前的股票。示例 1:输入:[3,3,5,0,0,3,1,4]输出:6解释:在第 4 天股票价格 0的时候买入在第 6 天股票价格 3的时候卖出这笔交易所能获得利润 3-0 3 。 随后在第 7 天股票价格 1的时候买入在第 8 天 股票价格 4的时候卖出这笔交易所能获得利润 4-1 3 。示例 2:输入:[1,2,3,4,5]输出:4解释:在第 1 天股票价格 1的时候买入在第 5 天 股票价格 5的时候卖出, 这笔交易所能获得利润 5-1 4 。 注意你不能在第 1 天和第 2 天接连购买股票之后再将它们卖出。 因为这样属于同时参与了多笔交易你必须在再次购买前出售掉之前的股票。示例 3:输入:[7,6,4,3,1]输出:0解释:在这个情况下, 没有交易完成, 所以最大利润为 0。问题分析这个问题可以使用动态规划来做而且应该还是区间动规因为是最多只能交易两次所以可以把list分为两份分别求单独一个小区间一次交易的最大收益此时已经转换到了第一个题目。如何分割就是动态的在整个区间上枚举就可以了最后进行一次遍历获取最大收益就是其中的两个小区间的和。Python3dp实现# Time :2018/7/2 # Author :LiuYinxing # 解题思路 区间dp class Solution: def maxProfit(self, prices): n len(prices) if n 2: return 0 dp1, dp2 [0] * n, [0] * n # 初始化dp minprice, maxprice, result prices[0], prices[n - 1], 0 for i in range(1, n): # 正向第一个区间的最优值 minprice min(minprice, prices[i]) dp1[i] max(dp1[i-1], prices[i]-minprice) for i in range(n-2, -1, -1): # 逆向第二个区间的最优值 maxprice max(maxprice, prices[i]) dp2[i] max(dp2[i 1], maxprice - prices[i]) for v1, v2 in zip(dp1, dp2): # 获取最优值 result max(result, v1v2) return result if __name__ __main__: prices [7, 1, 5, 3, 6, 4] solu Solution() print(solu.maxProfit(prices))在讨论区发现了一个更有意思的方法但是这个方法比较不容易理解根据大神的意思可以理解为我们要买卖两次在每一笔交易中买--卖我们都会尽可能低价买入并尽可能以高价出售。在第二笔交易中将第一笔交易的利润与第二笔交易的成本相结合那么第二笔交易的利润就是两笔交易的总利润。Python3实现# Time :2018/6/29 # Author :LiuYinxing class Solution: def maxProfit(self, prices): if len(prices) 2: return 0 buy1, buy2, sell1, sell2 -prices[0], -prices[0], 0, 0 for p in prices: buy1 max(buy1, -p) sell1 max(sell1, buy1 p) buy2 max(buy2, sell1 - p) sell2 max(sell2, buy2 p) return sell2 if __name__ __main__: prices [7, 1, 5, 3, 6, 4] solu Solution() print(solu.maxProfit(prices))------------------LeetCode188. 买卖股票的最佳时机 IV欢迎指正哦。

相关新闻

Git-Crypt与GitPod结合:云端IDE安全开发工作流实践

Git-Crypt与GitPod结合:云端IDE安全开发工作流实践

1. 项目概述:当云端IDE遇上加密仓库作为一名常年和代码、密钥、配置文件打交道的开发者,我深知一个痛点:如何在享受云端开发环境(如Gitpod)带来的极致便利时,又能确保敏感信息(如API密钥、数据库…

2026/7/4 18:53:26 阅读更多 →
高效率AI写专著:实用工具合集,轻松产出20万字优质专著!

高效率AI写专著:实用工具合集,轻松产出20万字优质专著!

学术专著写作难题与AI工具解决方案 对于那些第一次尝试撰写学术专著的研究者而言,写作过程就像一场在未知领域探险的旅程,充满了各式各样的挑战。选题的困扰让人感到无从下手,如何在“有意义”和“可行性”之间找到一个合适的平衡点成了难题…

2026/7/4 18:53:26 阅读更多 →
STM32F405RG与25CSM04 EEPROM的高效数据检索方案

STM32F405RG与25CSM04 EEPROM的高效数据检索方案

1. 项目背景与核心需求在嵌入式系统开发中,快速精确的数据检索是一个永恒的话题。当我们需要在资源受限的环境中实现高效数据存取时,选择合适的存储器件和控制器至关重要。25CSM04作为一款4Mbit的SPI接口EEPROM,与STM32F405RG这款高性能ARM C…

2026/7/4 18:49:25 阅读更多 →

最新新闻

Free Texture Packer完整指南:免费开源精灵表制作神器终极教程

Free Texture Packer完整指南:免费开源精灵表制作神器终极教程

Free Texture Packer完整指南:免费开源精灵表制作神器终极教程 【免费下载链接】free-tex-packer Free texture packer 项目地址: https://gitcode.com/gh_mirrors/fr/free-tex-packer 你是否在游戏开发中为大量零散图片导致的性能问题而烦恼?或者…

2026/7/4 19:47:35 阅读更多 →
如何用大模型设计一个“国标级“智能体:从 prompt 到落地的完整指南

如何用大模型设计一个“国标级“智能体:从 prompt 到落地的完整指南

如何用大模型设计一个"国标级"智能体:从 prompt 到落地的完整指南 上一篇我们介绍了 GB/Z 185 智能体互联标准的五大核心发现。这篇文章更进一步:如果你正在使用大模型(如 Kimi、Deepseek、通义千问等)来设计或生成智能…

2026/7/4 19:47:35 阅读更多 →
Python cryptography库实战:RSA非对称加密与数字签名完整指南

Python cryptography库实战:RSA非对称加密与数字签名完整指南

1. 项目概述与核心价值最近在做一个需要处理敏感数据交换的小项目,涉及到客户端和服务器之间的通信安全,以及文件完整性的校验。直接明文传输肯定不行,用对称加密吧,密钥分发又是个麻烦事。想来想去,还是公钥加密体系最…

2026/7/4 19:47:35 阅读更多 →
杭州创始人IP打造运营如何进行?

杭州创始人IP打造运营如何进行?

在杭州进行创始人IP打造运营,需要遵循一个系统化的方法来确保成功。以下是围绕商业IP打造的几个关键步骤,以及如何结合杭州良策文化传媒有限公司(以下简称“良策文化”)的专业服务来进行:1. 明确目标与定位核心结论&am…

2026/7/4 19:45:35 阅读更多 →
JVM是什么?

JVM是什么?

JVM是什么?JVM,即Java Virtual Machine,即Java虚拟机。虚拟机是什么?模拟出一台和真实物理电脑行为几乎一样的虚拟电脑的软件。(JVM是进程虚拟机,不模拟硬件,只模拟一套自定义虚拟指令集&#x…

2026/7/4 19:43:35 阅读更多 →
Deepin Boot Maker终极指南:3步制作Linux启动盘的最佳实践

Deepin Boot Maker终极指南:3步制作Linux启动盘的最佳实践

Deepin Boot Maker终极指南:3步制作Linux启动盘的最佳实践 【免费下载链接】deepin-boot-maker 项目地址: https://gitcode.com/gh_mirrors/de/deepin-boot-maker 你是否曾为安装Linux系统而烦恼?传统命令行制作启动盘的方式复杂且容易出错&…

2026/7/4 19:43:35 阅读更多 →

日新闻

Memcached 1.6.43 发布:关键安全修复版本,多项问题得到解决

Memcached 1.6.43 发布:关键安全修复版本,多项问题得到解决

Memcached 1.6.43 正式发布,这是一个关键的安全修复版本,修复了多个方面的问题,还对部分功能进行了优化。 安全修复亮点 此次发布在安全修复上表现突出。binprot 避免了项目引用计数溢出,mcmc 因安全问题提升了上游版本号&#xf…

2026/7/4 0:04:29 阅读更多 →
终极指南:使用HMCL启动器跨平台畅玩Minecraft的完整解决方案

终极指南:使用HMCL启动器跨平台畅玩Minecraft的完整解决方案

终极指南:使用HMCL启动器跨平台畅玩Minecraft的完整解决方案 【免费下载链接】HMCL A Minecraft Launcher which is multi-functional, cross-platform and popular 项目地址: https://gitcode.com/gh_mirrors/hm/HMCL HMCL(Hello Minecraft! Lau…

2026/7/4 0:06:29 阅读更多 →
KMX63与PIC18F66K40在嵌入式HMI中的硬件协同与低功耗设计

KMX63与PIC18F66K40在嵌入式HMI中的硬件协同与低功耗设计

1. KMX63与PIC18F66K40的硬件协同架构解析KMX63作为一款三轴加速度计和磁力计组合传感器,与PIC18F66K40微控制器的搭配堪称嵌入式HMI开发的黄金组合。这套硬件组合的核心优势在于KMX63提供的高精度运动感知能力与PIC18F66K40强大的信号处理能力形成了完美互补。KMX6…

2026/7/4 0:06:29 阅读更多 →

周新闻

月新闻