代码随想录 Day - 50|#123 买卖股票的最佳时机 III|#188 买卖股票的最佳时机 IV

news/2024/12/23 6:30:06/

清单

● 123.买卖股票的最佳时机III
● 188.买卖股票的最佳时机IV

LeetCode #123 买卖股票的最佳时机 III

1. 题目

给定一个数组,它的第 i 个元素是一支给定的股票在第 i 天的价格。
设计一个算法来计算你所能获取的最大利润。你最多可以完成两笔交易。
注意:你不能同时参与多笔交易(你必须在再次购买前出售掉之前的股票)。

2. 思路

  1. dp数组含义: 最多完成两笔交易,共存在五种状态 1.不交易 2. 第一次买入 3. 第一次卖出 4. 第二次买入 5. 第二次卖出 dp[i][j] 为第i天所能获取的最大利润, i 代表天数 j代表交易状态
  2. 递推公式:
    1. 若i天均不操作: dp[i][0] = dp[i-1][0]
    2. 若i天第一次买入: dp[i][1] = max(dp[i-1][1] #前一天已买入, dp[i-1][0] - prices[i] # i 天买入
    3. 第i天第一次卖出: dp[i][2] = max(dp[i-1][2] #前一天已卖出, dp[i-1][1] + prices[i] # i 天卖出
    4. 若i天第二次买入: dp[i][3] = max(dp[i-1][3] #前一天已买入, dp[i-1][2] - prices[i] # i 天买入
    5. 第i天第二次卖出: dp[i][4] = max(dp[i-1][4] #前一天已卖出, dp[i-1][3] + prices[i] # i 天卖出
  3. 初始化: dp[0][1] = - prices[i] dp[0][3] = - prices[i]
  4. 遍历顺序: 正向遍历

3. 代码实现

class Solution:def maxProfit(self, prices: List[int]) -> int:dp = [[0] * 5 for _ in range(len(prices))]dp[0][1] = - prices[0]dp[0][3] = - prices[0]for i in range(1,len(prices)):dp[i][0] = dp[i-1][0] # 不操作dp[i][1] = max(dp[i-1][1], dp[i-1][0] - prices[i]) #第一次买入dp[i][2] = max(dp[i-1][2], dp[i-1][1] + prices[i]) #第一次卖出dp[i][3] = max(dp[i-1][3], dp[i-1][2] - prices[i]) #第二次买入dp[i][4] = max(dp[i-1][4], dp[i-1][3] + prices[i]) #第二次卖出return dp[-1][4]

LeetCode #188 买卖股票的最佳时机 IV

1. 题目

给定一个整数数组 prices ,它的第 i 个元素 prices[i] 是一支给定的股票在第 i 天的价格。
设计一个算法来计算你所能获取的最大利润。你最多可以完成 k 笔交易。
注意:你不能同时参与多笔交易(你必须在再次购买前出售掉之前的股票)。

2. 思路

思路同上一题一样,共存在2k+1种状态 0为不操作,奇数为买入,偶数为卖出

3. 代码实现

class Solution:def maxProfit(self, k: int, prices: List[int]) -> int:dp = [[0] * ( 2 * k + 1) for _ in range(len(prices))]for i in range(1, 2 * k, 2):dp[0][i] = - prices[0]for i in range(1, len(prices)):for j in range(0, 2*k - 1, 2):dp[i][j+1] = max(dp[i-1][j+1], dp[i-1][j] - prices[i])dp[i][j+2] = max(dp[i-1][j+2], dp[i-1][j+1] + prices[i])return dp[-1][2*k]

http://www.ppmy.cn/news/1127848.html

相关文章

unity 限制 相机移动 区域(无需碰撞检测)

限制功能原著地址:unity限制相机可移动区域(box collider)_unity限制相机移动区域_manson-liao的博客-CSDN博客 一、创建限制区域 创建一个Cube,Scale大小1,添加组件:BoxCollder,调整BoxColld…

【JavaGuide学习笔记】Day.3

JAVA基础常见面试题(中) 1.面向对象和面向过程的区别 2.对象的实体与对象的引用有何不同? 3.对象相等和引用相等的区别 4.构造方法有哪些特点?是否可被override? 5.面向对象的三大特征 6.接口和抽象类有什么共同点…

【深度学习实验】卷积神经网络(五):深度卷积神经网络经典模型——VGG网络(卷积层、池化层、全连接层)

目录 一、实验介绍 二、实验环境 1. 配置虚拟环境 2. 库版本介绍 三、实验内容 0. 导入必要的工具包 1. conv_layer(创建卷积块) 2. vgg_conv_block(卷积模块:卷积层*n、池化层) 3. vgg_fc_layer(…

YashanDB向量化执行引擎如何给海量数据分析提速

作者介绍:李伟超,数据库系统架构师,YashanDB架设技术开发负责人,10年以上数据库内核技术开发经验。 *全文4510个字,阅读时长约11分钟。 背景 海量数据OLAP场景,通常具有数据规模大、查询复杂度高、处理速…

Ubuntu 设置开机自动执行脚本

1. 建立service文件 sudo vim /etc/systemd/system/redis-server.service2. redis service文件 [Unit] DescriptionAdvanced key-value store Afternetwork.target Documentationhttp://redis.io/documentation, man:redis-server(1)[Service] Typenotify ExecStart/usr/bin/…

Blender 之创建一个简单的笔筒

文章目录 成品图实现步骤 你是不是想创建一个笔筒捏? follow me! 成品图 实现步骤 先添加一个柱体 选中柱体,然后按tab 进入编辑模式 切换到面模式 (可以按主键盘的 3 键) 分别选中上下面,鼠标右键,选…

【CMU15-445 Part-12】Query Execution I

Part12-Query Execution I Processing Models Processing Model主要指的是明确如何去执行一个查询计划(top 2 bottom or bottom 2 top,operator之间的传递)。 Iterator Model (volcano model/pipeline model);每个算子实现一个Next( ),父…

LDGRB-01 用于在边缘处理人工智能的嵌入式硬件

LDGRB-01 用于在边缘处理人工智能的嵌入式硬件商业和企业中的IT系统正在全面快速发展,一个不断增长的趋势正在将计算能力推向边缘。Gartner预测,到2025年,边缘计算将处理75%的数据由所有用例产生,包括工厂、医疗保健和运输中的用…