代码随想录算法训练营第42天|188. 买卖股票的最佳时机 IV、714. 买卖股票的最佳时机含手续费

news2024/11/25 19:34:52

目录

  • 188. 买卖股票的最佳时机 IV(交易最多k次)
    • 1、题目描述
    • 2、思路
    • 3、code
    • 4、复杂度分析
  • 714. 买卖股票的最佳时机含手续费
    • 1、题目描述
    • 2、思路
    • 3、code
    • 4、复杂度分析
  • 309. 买卖股票的最佳时机含冷冻期
    • 1、题目描述
    • 2、思路
    • 3、code
    • 4、复杂度分析
  • 买卖股票习题总结

188. 买卖股票的最佳时机 IV(交易最多k次)

题目链接:link

1、题目描述

给你一个整数数组 prices 和一个整数 k ,其中 prices[i] 是某支给定的股票在第 i 天的价格。
设计一个算法来计算你所能获取的最大利润。你最多可以完成 k 笔交易。也就是说,你最多可以买 k 次,卖 k 次。
注意:你不能同时参与多笔交易(你必须在再次购买前出售掉之前的股票)。
示例 1:
输入:k = 2, prices = [2,4,1]
输出:2
解释:在第 1 天 (股票价格 = 2) 的时候买入,在第 2 天 (股票价格 = 4) 的时候卖出,这笔交易所能获得利润 = 4-2 = 2 。

2、思路

😇和之前的交易最多2次是非常相似的,具体思路就省略了

3、code

class Solution:
    def maxProfit(self, k: int, prices: List[int]) -> int:
        dp = [[0]*2*k for i in range(len(prices))]
        for j in range(0,2*k,2):# k= 2 0,2 代表持有
            dp[0][j] = - prices[0]
        for i in range(1,len(prices)):
            for j in range(0,2*k):
                if j == 0:
                    dp[i][0] = max(dp[i-1][0],-prices[i])
                elif j % 2 == 0:
                    dp[i][j] = max(dp[i-1][j],dp[i-1][j-1]-prices[i])
                else:
                    dp[i][j] = max(dp[i-1][j],dp[i-1][j-1]+prices[i])
        return dp[-1][-1]

4、复杂度分析

1️⃣ 时间复杂度: O ( M ∗ N ) O(M*N) O(MN)
2️⃣ 空间复杂度: O ( M ∗ N ) O(M*N) O(MN)

714. 买卖股票的最佳时机含手续费

题目链接:link

1、题目描述

给定一个整数数组 prices,其中 prices[i]表示第 i 天的股票价格 ;整数 fee 代表了交易股票的手续费用。
你可以无限次地完成交易,但是你每笔交易都需要付手续费。如果你已经购买了一个股票,在卖出它之前你就不能再继续购买股票了。
返回获得利润的最大值。
注意:这里的一笔交易指买入持有并卖出股票的整个过程,每笔交易你只需要为支付一次手续费。

示例 1:
输入:prices = [1, 3, 2, 8, 4, 9], fee = 2
输出:8
解释:能够达到的最大利润:
在此处买入 prices[0] = 1
在此处卖出 prices[3] = 8
在此处买入 prices[4] = 4
在此处卖出 prices[5] = 9
总利润: ((8 - 1) - 2) + ((9 - 4) - 2) = 8

2、思路

😙和之前写过的交易无限次数是一样的

3、code

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

4、复杂度分析

1️⃣ 时间复杂度: O ( N ) O(N) O(N)
2️⃣ 空间复杂度: O ( N ) O(N) O(N)

309. 买卖股票的最佳时机含冷冻期

题目链接:link

1、题目描述

给定一个整数数组prices,其中第 prices[i] 表示第 i 天的股票价格 。​
设计一个算法计算出最大利润。在满足以下约束条件下,你可以尽可能地完成更多的交易(多次买卖一支股票):
卖出股票后,你无法在第二天买入股票 (即冷冻期为 1 天)。
注意:你不能同时参与多笔交易(你必须在再次购买前出售掉之前的股票)。

示例 1:
输入: prices = [1,2,3,0,2]
输出: 3
解释: 对应的交易状态为: [买入, 卖出, 冷冻期, 买入, 卖出]

2、思路

在这里插入图片描述

3、code

class Solution:
    def maxProfit(self, prices: List[int]) -> int:
        dp = [[0]*4 for i in range(len(prices))]
        dp[0][0] = -prices[0] # 持有股票
        dp[0][1] = 0 # 不持有股票,但是不是今天卖出的
        dp[0][2] = 0 # 不持有股票,且今天卖出
        dp[0][3] = 0 # 冷冻状态
        for i in range(1,len(prices)):
            dp[i][0] = max(dp[i-1][0],max(dp[i-1][1],dp[i-1][3])-prices[i])
            dp[i][1] = max(dp[i-1][1],dp[i-1][3])
            dp[i][2] = dp[i-1][0] + prices[i]
            dp[i][3] = dp[i-1][2]
        return max(dp[-1][:])

4、复杂度分析

1️⃣ 时间复杂度: O ( N ) O(N) O(N)
2️⃣ 空间复杂度: O ( N ) O(N) O(N)

买卖股票习题总结

🍇在买卖股票这种类型题里面,考虑的是持有或者不持有股票这两种状态,持有不代表是当天买的,只是当天手里是有这个股票的
👉 买卖股票的最佳时机:股票只能买卖一次,问最大收益。

# dp[i][0]代表第i天不持有股票能够获得得利润
# dp[i][1]代表第i天持有股票能够获得的利润
dp[i][0] = max(dp[i-1][1]+prices[i],dp[i-1][0])
dp[i][1] = max(-prices[i],dp[i-1][1])

👉 买卖股票的最佳时机 Ⅱ:股票可以买卖无数次,问最大收益。

dp[i][0] = max(dp[i-1][1]+prices[i],dp[i-1][0])
dp[i][1] = max(dp[i-1][0]-prices[i],dp[i-1][1])

👉 买卖股票的最佳时机 Ⅲ:股票最多买卖两次,问最大收益。

# dp[0][0] = -prices[0] # 第一次持有股票
# dp[0][1] = 0 # 第一次不持有股票
# dp[0][2] = -prices[0] # 第二次持有股票
# dp[0][3] = 0 # 第二次不持有股票

dp[i][0] = max(dp[i-1][0],-prices[i])
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])

👉 买卖股票的最佳时机 Ⅳ:股票最多买卖 k 次,问最大收益。

# 偶数代表持有
# 奇数代表不持有
# 单独考虑第一次:j=0
if j == 0:
    dp[i][0] = max(dp[i-1][0],-prices[i])
elif j % 2 == 0:
    dp[i][j] = max(dp[i-1][j],dp[i-1][j-1]-prices[i])
else:
    dp[i][j] = max(dp[i-1][j],dp[i-1][j-1]+prices[i])

👉 买卖股票的最佳时机含手续费:股票买卖有手续费,问最大收益。

dp[i][0] = max(dp[i-1][0],dp[i-1][1] + prices[i] - fee)
dp[i][1] = max(dp[i-1][1],dp[i-1][0] - prices[i])

👉 买卖股票的最佳时机含冷冻期:股票买卖有冷冻期,问最大收益。

dp[0][0] = -prices[0] # 持有股票
dp[0][1] = 0 # 不持有股票,但是不是今天卖出的
dp[0][2] = 0 # 不持有股票,且今天卖出
dp[0][3] = 0 # 冷冻状态

dp[i][0] = max(dp[i-1][0],max(dp[i-1][1],dp[i-1][3])-prices[i])
dp[i][1] = max(dp[i-1][1],dp[i-1][3])
dp[i][2] = dp[i-1][0] + prices[i]
dp[i][3] = dp[i-1][2]

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

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

智能语音交互:人工智能如何改变我们的沟通方式?

在科技飞速发展的今天,人工智能(AI)已经渗透到我们生活的方方面面。其中,智能语音交互作为AI技术的一个重要分支,正以前所未有的速度改变着我们的沟通方式。从智能家居的控制到办公自动化的应用,再到日常交…

CentOs7 解决yum更新源报错:[Errno 14] HTTP Error 404 - Not Found 正在尝试其它镜像。

CentOs7 解决yum更新源报错:[Errno 14] HTTP Error 404 - Not Found 正在尝试其它镜像。 前言问题解决方法: 前言 遇到这个问题大概率是镜像源的问题可以参照这篇文章的内容试一下 镜像源问题相关解决方法 根据自己的情况对症下药,如果还不…

WPS如何删除表格下的空白页

WPS Office(12.1.0.17827) ① 鼠标右键,选择段落 ② 行距:固定值;设置值:1磅;取消勾选,确定即可~

【区块链 + 人才服务】CERX- 基于联盟链的研学资源交换网络 | FISCO BCOS应用案例

CERX 是定位于面向高校科学研究与教学的分布式研学资产交换网络,构建一个用于数据、算法模型、论文和课程的研学资源价值流转平台。该平台采用 FISCO BCOS 联盟链为核心区块链层。 CERX 基于“交叉学科”的人才培养生态,围绕“科研、课件、课程、证书”…

【C++从练气到飞升】23--内联函数、auto、范围for、nullptr

🎈个人主页:库库的里昂 ✨收录专栏:C从练气到飞升 🎉鸟欲高飞先振翅,人求上进先读书🎉 目录 ⛳️推荐 一、内联函数 1.1 定义 1.2 特性 二、auto关键字 2.1 简介 2.2 auto使用细则 2.3 不能使用aut…

ES6标准---【二】【学习ES6看这一篇就够了!!】

目录 ES6以往文章 ES6新增字符串方法: includes()、startsWith()、endsWith() repeat() padStart()、padEnd() 常见用途 为数值补全指定位数 提示字符串格式 trimStart()、trimEnd() String.raw() ES6以往文章 ES6标准-【一】【学习ES6看这一篇就够了&a…

开关电源综合测试平台自动生成报告,智能分析电源测试参数

在电源模块的检测过程中,数据的准确性和分析效率至关重要,开关电源综合测试平台的数据报告和数据分析功能为企业的电源测试带来了便利。 NSAT-8000开关电源综合测试平台是集自动化测试与数据收集分析于一体的综合测试软件,打破了传统测试系统…

【组件】WEB前端-富文本编辑器组件推荐 在线编辑器 Word

【组件】WEB前端-富文本编辑器组件推荐 在线编辑器 Word canvas-editor 基于canvas/svg的富文本编辑器 canvas-editor | rich text editor by canvas/svgrich text editor by canvas/svghttps://hufe.club/canvas-editor-docs/ canvas-editor 基于canvas/svg的富文本编辑器 开…

文案改写工具有哪些?5款智能改写工具迅速提升文案品质

在信息爆炸的时代,优秀的文案如同黄金,能瞬间抓住消费者的眼球。然而,创作出独具匠心的文案并非易事,尤其是当需要不断改写以保持文案内容新鲜感时。那么,文案改写工具有哪些是能帮助我们事半功倍呢?以下5款…

Goby 漏洞发布|(CVE-2024-45195)Apache OFBiz /viewdatafile 代码执行漏洞【已复现】

漏洞名称:Apache OFBiz /viewdatafile 代码执行漏洞(CVE-2024-45195) English Name:Apache OFBiz /viewdatafile Code Execution Vulnerability(CVE-2024-45195) CVSS core: 8.0 漏洞描述: Apache OFBiz是一个开源…

--数据库--

制作工人薪资管理系统 #include <myhead.h> #include <sqlite3.h> typedef struct {int gh;char name[20];double salary; }Worker;int do_insert(sqlite3 *ppdb) {Worker work;printf("请输入插入的工号&#xff1a;");scanf("%d",&work.…

基于Verilog HDL的FPGA设计基础

第一章 Verilog数字集成电路设计方法概述 HDL(Hardware Description Language)----硬件描述语言 EDA(Electronic Design Automation)----电子设计自动化 VLSI(Very Large Scale Integrated)----超大规模集成电路 ASIC(Application Specific Integrated Circuit)----专用集成电路…

坚守官网,深挖没有错;积极转型也没错,就怕10年前经验用在现在

如今官网建设领域哀嚎一片&#xff0c;出现三种应对策略。 其一&#xff1a;坚守官网&#xff0c;深挖下去&#xff0c;做出高大上&#xff0c;精美炫酷和实效网站&#xff0c;路子很对。 其二&#xff1a;积极寻求转型&#xff0c;客户需要啥就做啥&#xff0c;比如搞小程序…

Vue3可编辑表格插件

插件亮点&#xff1a; 通过可自定义单元格内容。可控的状态控制&#xff0c;例如只读、禁止编辑行等配置。可控的状态交互&#xff0c;例如框选单元格、框选行等配置。可控的推拽顺序&#xff0c;例如拖拽行、推拽列。方便的单元格数据验证配置。方便的快捷右键菜单&#xff0c…

std::map 合并

目录 示例 效果 采用insert函数实现两个map的合并。使用方法&#xff1a; map1.insert(map2) 假如map2的某些键也出现在map1里面&#xff0c;则map1中重复的键值对不变&#xff0c;map2中重复的键值对无法覆盖map1。 示例 #include <map> #include <iostream>…

USB转百兆网卡芯片CH397在多平台下使用说明

简介 CH397是一款USB2.0高速转以太网芯片&#xff0c;支持10M/100M网络的以太网MACPHY&#xff0c;内置青稞RISC-V 处理器、符合IEEE802.3 和IEEE802.3az-2010 协议规范。支持Windows/ Linux /macOS /iOS /Android 等多平台各系统&#xff0c;适配各类台式电脑、笔记本电脑、平…

【Nacos】报错之服务实例类型不允许改变

在使用Nacos配置服务的实例类型的时候&#xff0c;对服务的实例类型进行修改。 之前的非临时实例&#xff0c;修改为临时实例后&#xff0c;报错&#xff1a; com.alibaba.nacos.api.exception.NacosException: errCode: 400, errMsg: Current service DEFAULT_GROUPproduct-…

洛谷 P1039 [NOIP2003 提高组] 侦探推理

题目来源于&#xff1a;洛谷 原题点这里 题目本质&#xff1a;模拟&#xff0c;字符串&#xff0c;差分&#xff0c;模拟 题目思路&#xff1a; 记录每一句话是谁说的以及这句话的内容&#xff0c;可以用map存人名对应的下标&#xff0c;我们枚举每一个人i&#xff0c;假设i…

数据结构与算法1: 链表

基础知识 链表可以被想象为一系列的节点&#xff0c;每个节点至少有一个指针指向下一个节点&#xff0c;在最后一个节点&#xff0c;用null pointer来表示链表的结束。 链表的创建速度通常很快&#xff0c;在表头和表尾的插入也很快&#xff08;O(1)&#xff09;&#xff0c;…

2024年T电梯修理证模拟考试题库及T电梯修理理论考试试题

题库来源&#xff1a;安全生产模拟考试一点通公众号小程序 2024年T电梯修理证模拟考试题库及T电梯修理理论考试试题是由安全生产模拟考试一点通提供&#xff0c;T电梯修理证模拟考试题库是根据T电梯修理最新版教材&#xff0c;T电梯修理大纲整理而成&#xff08;含2024年T电梯…