LeetCode:188. Best Time to Buy and Sell Stock IV - Python 问题描述LeetCode188. 买卖股票的最佳时机 IV给定一个数组它的第i个元素是一支给定的股票在第i天的价格。设计一个算法来计算你所能获取的最大利润。你最多可以完成k笔交易。注意:你不能同时参与多笔交易你必须在再次购买前出售掉之前的股票。示例 1:输入:[2,4,1], k 2输出:2解释:在第 1 天 (股票价格 2) 的时候买入在第 2 天 (股票价格 4) 的时候卖出这笔交易所能获得利润 4-2 2 。示例 2:输入:[3,2,6,5,0,3], k 2输出:7解释:在第 2 天 (股票价格 2) 的时候买入在第 3 天 (股票价格 6) 的时候卖出, 这笔交易所能获得利润 6-2 4 。 随后在第 5 天 (股票价格 0) 的时候买入在第 6 天 (股票价格 3) 的时候卖出, 这笔交易所能获得利润 3-0 3 。问题分析这个问题应该是前一个问题的升级加强版了普通方法很容易超时在讨论区看看了大神的做法发现一种非常有趣但又比较难理解的方法总结起来基本是给出两种解释实现起来是一个代码只是对问题的角度不同而已。1、dp推导在每一笔交易中买--卖我们都会尽可能低价买入并尽可能以高价出售。在第二笔交易中将第一笔交易的利润与第二笔交易的成本相结合那么第二笔交易的利润就是两笔交易的总利润并以此类推。具体推导请参考大神fun4LeetCode在讨论的区的解答有点长耐心看。2、另一种解释是采用状态机进行说明具体可以参考MadDetective的程序。这种解释主要是把整个问题划分成几种状态并相互转换。图片来自MadDetective。其中hold表示股票持有状态手里有一只股票sold表示所有股票已经卖出手里没有股票。Python3实现class Solution: def maxProfit(self, k, prices): hold, sold [float(-inf)] * (k 1), [0] * (k 1) for price in prices: for j in range(1, k1): hold[j] max(hold[j], sold[j-1]-price) # hold-hold, sold-hold sold[j] max(sold[j], hold[j]price) # sold-sold, hold-sold return sold[k] if __name__ __main__: prices, k [7, 1, 5, 3, 6, 4], 4 solu Solution() print(solu.maxProfit(k, prices))hold[j]的物理含义是在遍历到当前价格时你正处于持有股票的状态且这次持有属于第 j 笔交易即已经买了第 j 只股票但还没卖。在买入之前你已经完成了 j-1 笔完整的买卖。sold[j]的物理含义是在遍历到当前价格时你正处于不持有股票的状态且已经完成了 j 笔完整的买卖交易。参考链接[1]:https://leetcode.com/problems/best-time-to-buy-and-sell-stock-with-transaction-fee/discuss/108870/Most-consistent-ways-of-dealing-with-the-series-of-stock-problems[2]:https://leetcode.com/problems/best-time-to-buy-and-sell-stock-iv/discuss/127020/Java-Solution-time-O(nk)-space-O(k)欢迎探讨。

相关新闻

最新新闻

Android应用无Root脱壳实战:BlackDex原理与逆向分析指南

Android应用无Root脱壳实战:BlackDex原理与逆向分析指南

1. 项目概述:为什么我们需要BlackDex?在Android应用安全研究、逆向分析甚至是合法合规的审计工作中,我们常常会遇到一个棘手的“门卫”——加固壳。厂商为了保护核心代码逻辑和知识产权,会使用各种加固技术对应用的DEX文件&#x…

2026/7/4 19:56:47
免费分享最新IDEA安装及授权教程(附带文件)

免费分享最新IDEA安装及授权教程(附带文件)

前言 大家好,我是Ktiiy学姐👋。刚入驻 CSDN,以后会持续更新,给大家免费零基础开发环境搭建、项目源码、避坑教程、面试技巧等!点关注不迷路 今天给大家带来IDEA 完整纯净安装配置永久授权教程,全程无废话…

2026/7/4 19:56:47
蜜獾算法优化Transformer的单变量时序预测Matlab实现

蜜獾算法优化Transformer的单变量时序预测Matlab实现

1. 蜜獾算法与Transformer的融合背景单变量时间序列预测在金融、气象、工业等领域具有广泛应用价值。传统方法如ARIMA、指数平滑等在处理复杂非线性时序数据时往往表现不佳。近年来,Transformer架构凭借其强大的序列建模能力,在时序预测领域展现出显著优…

2026/7/4 19:56:47
Linux第05篇:文本处理三剑客——grep/sed/awk 从入门到实战

Linux第05篇:文本处理三剑客——grep/sed/awk 从入门到实战

本文导读:本文是系列第 5 篇,讲解 Linux 文本处理领域最重要的三个工具:grep、sed、awk。Java 开发者排查生产问题时,80% 的时间在和日志文件打交道,而这三个工具正是日志分析的核心武器。本文会讲透它们的核心用法&am…

2026/7/4 19:56:47
QT系统篇(5)(下)

QT系统篇(5)(下)

一、多线程1.了解在 Qt 中,多线程的处理一般是通过 QThread 类来实现。QThread 代表一个在应用程序中可以独立控制的线程,也可以和进程中的其他线程共享数据。QThread 对象管理程序中的一个控制线程。2.方法3.方法waitbool QThread::wait(unsigned long …

2026/7/4 19:56:47
Linux高并发Reactor反应堆模式深度精讲,单Reactor、多Reactor架构、epoll高并发服务器手写、Nginx核心架构落地实战

Linux高并发Reactor反应堆模式深度精讲,单Reactor、多Reactor架构、epoll高并发服务器手写、Nginx核心架构落地实战

0. 前言:从零散IO到高并发架构的终极跃迁我们彻底吃透了TCP全套网络体系,掌握了三次握手、四次挥手、TCP状态机、粘包拆包解决方案与标准Socket通信代码,具备了基础网络编程能力。但单纯的Socketepoll只能实现基础IO监听,无架构设…

2026/7/4 19:51:47

周新闻

月新闻