代码随想录算法训练营第四十八天 | 188.买卖股票的最佳时机IV、309.最佳买卖股票时机含冷冻期、714.买卖股票的最佳时机含手续费、股票总结

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

题目链接:https://leetcode.cn/problems/best-time-to-buy-and-sell-stock-iv/
文档讲解:https://programmercarl.com/0188.%E4%B9%B0%E5%8D%96%E8%82%A1%E7%A5%A8%E7%9A%84%E6%9C%80%E4…
视频讲解:https://www.bilibili.com/video/BV16M411U7XJ

思路

将买卖股票3当中的递推公式抽象成一个循环:

  • 第i天第j次交易后持有股票的两种情况dp[i][2 * j - 1]
    • 第i - 1天第j次交易后持有股票dp[i - 1][2 * j - 1]
    • 第i - 1天第j次交易后不持有股票,是第i天买的股票dp[i - 1][2 * j - 2] - prices[i]
  • 第i天第j次交易后不持有股票的两种情况dp[i][2 * j]
    • 第i - 1天第j次交易后不持有股票dp[i][2 * j]
    • 第i - 1天第j次交易后持有股票,是第i天卖的股票dp[i][2 * j - 1]
for (int j = 1; j <= k; j++) {dp[i][2 * j - 1] = Math.max(dp[i - 1][2 * j - 1], dp[i - 1][2 * j - 2] - prices[i]);dp[i][2 * j] = Math.max(dp[i - 1][2 * j], dp[i - 1][2 * j - 1] + prices[i]);
}

代码

class Solution {public int maxProfit(int k, int[] prices) {int[][] dp = new int[prices.length][2 * k + 1];for (int i = 1; i <= k; i++) {dp[0][2 * i - 1] = -prices[0];}for (int i = 1; i < prices.length; i++) {for (int j = 1; j <= k; j++) {dp[i][2 * j - 1] = Math.max(dp[i - 1][2 * j - 1], dp[i - 1][2 * j - 2] - prices[i]);dp[i][2 * j] = Math.max(dp[i - 1][2 * j], dp[i - 1][2 * j - 1] + prices[i]);}}return dp[prices.length - 1][2 * k];}
}

分析:时间复杂度:O(nk),空间复杂度:O(nk)。

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

题目链接:https://leetcode.cn/problems/best-time-to-buy-and-sell-stock-with-cooldown/
文档讲解:https://programmercarl.com/0309.%E6%9C%80%E4%BD%B3%E4%B9%B0%E5%8D%96%E8%82%A1%E7%A5%A8%E6…
视频讲解:https://www.bilibili.com/video/BV1rP4y1D7ku

思路

  • 确定dp数组以及下标的含义:
    • dp[i][0]:持有股票;
    • dp[i][1]:保持卖出股票;
    • dp[i][2]:当天卖出股票;
    • dp[i][3]:冷冻期;
  • 确定递推公式:
    • dp[i][0]
      • 前一天持股:dp[i - ][0]
      • 前一天不持股:前一天保持卖出股票dp[i - 1][1] - prices[i],前一天是冷冻期dp[i - 1][3] - prices[i]
    • dp[i][1]
      • 前一天保持卖出股票:dp[i - 1][1]
      • 前一天为冷冻期:dp[i - 1][3]
    • dp[i][2]:前一天一定持有股票dp[i - 1][0] + prices[i]
    • dp[i][3]:前一天一定卖出了股票dp[i - 1][2]
  • dp数组如何初始化:dp[0][0] = -prices[0];。如果当前状态非法,比如dp[0][1],可以通过后面状态的需要来给非法状态赋值,本题给非法状态赋值0。
  • 确定遍历顺序:从第二天开始正序遍历。
  • 打印dp数组,用于debug

代码

class Solution {public int maxProfit(int[] prices) {int[][] dp = new int[prices.length][4];/*0:持有1:保持卖出2:当天卖出3:冷冻期*/dp[0][0] = -prices[0];for (int i = 1; i < prices.length; i++) {dp[i][0] = Math.max(dp[i - 1][0], Math.max(dp[i - 1][1] - prices[i], dp[i - 1][3] - prices[i]));dp[i][1] = Math.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 Math.max(dp[prices.length - 1][1], Math.max(dp[prices.length - 1][2], dp[prices.length - 1][3]));}
}

分析:时间复杂度:O(n),空间复杂度:O(4n)。

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

题目链接:https://leetcode.cn/problems/best-time-to-buy-and-sell-stock-with-transaction-fee/
文档讲解:https://programmercarl.com/0714.%E4%B9%B0%E5%8D%96%E8%82%A1%E7%A5%A8%E7%9A%84%E6%9C%80%E4…
视频讲解:https://www.bilibili.com/video/BV1z44y1Z7UR

思路

在买卖股票2的基础上,每次卖股票时减去手续费就可以了:dp[i][1] = Math.max(dp[i - 1][1], dp[i - 1][0] + prices[i] - fee);

代码

class Solution {public int maxProfit(int[] prices, int fee) {int[][] dp = new int[prices.length][2]; // 0为持有,1为卖出dp[0][0] = -prices[0];for (int i = 1; i < prices.length; i++) {dp[i][0] = Math.max(dp[i - 1][0], dp[i - 1][1] - prices[i]);dp[i][1] = Math.max(dp[i - 1][1], dp[i - 1][0] + prices[i] - fee);}return Math.max(dp[prices.length - 1][1], dp[prices.length - 1][0]);}
}

分析:时间复杂度:O(n),空间复杂度:O(2n)。

股票总结

文档讲解:https://programmercarl.com/%E5%8A%A8%E6%80%81%E8%A7%84%E5%88%92-%E8%82%A1%E7%A5…

今日复习

数组理论基础
704. 二分查找
27. 移除元素
977.有序数组的平方
209.长度最小的子数组
59.螺旋矩阵II
数组部分总结

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

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

相关文章

playwright录制脚本原理

Paywright录制工具UI 在上一篇博客中介绍了如何从0构建一款具备录制UI测试的小工具。此篇博客将从源码层面上梳理playwright录制原理。当打开playwright vscode插件时&#xff0c;点击录制按钮&#xff0c;会开启一个新浏览器&#xff0c;如下图所示&#xff0c;在新开浏览器页…

python监听麦克风并调用阿里云的实时语音转文字

import time import threading import queue import sounddevice as sd import numpy as np import nls import sys# 阿里云配置信息 URL "wss://nls-gateway-cn-shanghai.aliyuncs.com/ws/v1" TOKEN "016ca1620aff421da8fac81b9fb52dc5" # 参考https:/…

Hive基础知识(十八):Hive 函数的使用

1. 系统内置函数 1&#xff09;查看系统自带的函数 hive (hive3)> show functions; Time taken: 0.085 seconds, Fetched: 289 row(s) 2&#xff09;显示自带的函数的用法 hive (hive3)> desc function upper; OK tab_name upper(str)- Returns str with all characters…

“了解MySQL中的enum枚举数据类型“

目录 # 开篇 1. 创建包含枚举类型的表 2. 插入枚举类型的数据 3. 查询包含枚举类型的表 4. 更新枚举类型的数据 5. 使用枚举类型的好处 注意事项 示例总结 附加 # 开篇 在数据库中&#xff0c;枚举&#xff08;ENUM&#xff09;是一种数据类型&#xff0c;用于存储一组…

即插即用篇 | 手把手教你 YOLOv10 添加注意力机制 | 20+ 种全打通!

YOLOv10 添加注意力机制 ! 视频教程地址-哔哩哔哩 文章目录 YOLOv10 添加注意力机制 !注意力机制介绍注意力机制的分类1. SE 注意力模块1.1 原理1.2 代码2. CBAM 注意力模块2.1 原理2.2 代码3. ECA 注意力模块3.1 原理3.2 代码4. CA 注意力模块4.1 原理4.2 代码5. 添加方式�…

构建开源多模态RAG系统

在这个新的冒险中&#xff0c;我们将深入研究使用开源大型语言多模态&#xff08;LLMM&#xff09;构建检索增强型生成&#xff08;RAG&#xff09;系统的过程。值得注意的是&#xff0c;我们的重点是在不依赖LangChain或Llama索引的情况下实现这一点&#xff1b;相反&#xff…

LabVIEW在机器人研究所中的应用

机器人研究所致力于机器人技术的研究与开发&#xff0c;涵盖工业机器人、服务机器人、医疗机器人等多个领域。研究所需要一个高效、灵活的实验控制和数据采集系统&#xff0c;以进行复杂的机器人实验&#xff0c;并对实验数据进行实时处理和分析。 项目需求 实时控制与监控&am…

Python函数魔术:深入理解18个高级函数特性

今天&#xff0c;我们将一起探索那些让代码瞬间变得优雅而强大的高级函数。准备好&#xff0c;让我们一起揭开它们的神秘面纱吧&#xff01; 1. map()&#xff1a;一招制胜&#xff0c;批量操作 想象一下&#xff0c;你需要给一个数字列表的每个元素加上5。普通的循环是不是让…

【PyTorch单点知识】神经元网络模型剪枝prune模块介绍(下,结构化剪枝)

文章目录 0. 前言1. torch.nn.utils.prune中的结构化剪枝方法2. PyTorch实例2.1 random_structured2.2 prune.ln_structured 3. 总结 0. 前言 按照国际惯例&#xff0c;首先声明&#xff1a;本文只是我自己学习的理解&#xff0c;虽然参考了他人的宝贵见解及成果&#xff0c;但…

NC--介绍-未加密加密后-流量抓包对比

免责声明:本节仅做技术交流与学习... 目录 介绍: 用法: 未加密--流量抓包 加密: 攻击端 靶机 抓包分析: 介绍: nc 是一个Linux环境下常用的工具命令&#xff0c;可以用来帮助开发者查询和解决网路问题&#xff0c;通常被认为是 NetCat 工具的缩写&#xff0c;在网络工具…

Hi3861 OpenHarmony嵌入式应用入门--轮询按键

本篇介绍使用轮询方式读取gpio状态来判断按键状态。 原理图如下 GPIO API API名称 说明 hi_u32 hi_gpio_init(hi_void); GPIO模块初始化 hi_u32 hi_io_set_pull(hi_io_name id, hi_io_pull val); 设置某个IO上下拉功能。 hi_u32 hi_gpio_set_dir(hi_gpio_idx id, hi_gpi…

MySQL理解-下载-安装

MySQL理解: mysql:是一种关系型数据库管理系统。 下载&#xff1a; 进入官网MySQLhttps://www.mysql.com/ 找到download 滑动到最下方&#xff1a;有一个开源社区版的链接地址&#xff1a; 然后就下载完成了 安装&#xff1a; 双击&#xff1a; 一直next 一直next这一步&…

仓颉编程语言入门

华为在 2024 年 6 月 21 日的华为开发者大会上&#xff0c;华为终端 BG 软件部总裁龚体正式官宣了华为自研仓颉编程语言&#xff0c;并发布了 HarmonyOS NEXT 仓颉语言开发者预览版。 仓颉编程语言文件后缀名为 .cj, 以下是第一个入门代码输出&#xff1a;你好&#xff0c;仓颉…

ESP32-S3方案应用设备无线交互技术,产品远程控制与语音交互

在物联网和人工智能(AI)技术融合的浪潮中&#xff0c;ESP32-S3芯片以其卓越的性能和多功能性&#xff0c;成为智能家居和工业自动化领域的明星产品。 ESP32-S3是一款基于Xtensa LX6处理器的嵌入式系统级芯片&#xff0c;具有高效、低功耗的特点。集成的Wi-Fi和蓝牙功能&#x…

浔川python代码编辑器——浔川总社部

众所周知, tkinter的Text文本框功能强大, Python自带的IDLE编辑器也是用tkinter编写的。这里作者也用tkinter的Text文本框等控件, 设计功能较齐全的文本编辑器程序。 目标功能: 编辑文本文件 编辑二进制文件 (字符会以转义序列形式显示, 如’abc\xff’) 支持ansi、gbk、utf-8…

《昇思25天学习打卡营第01天|基本介绍》

基本情况 MindSpore昇思是一个全场景深度学习框架 设计目标 MindSpore的设计目标是让深度学习开发更加简单、高效和安全 优点 简单性&#xff1a;MindSpore 有一个直观的API设计&#xff0c;使得新手也能快速上手&#xff0c;同时还支持自动微分。高效性&#xff1a;它针对…

golang中的内存缓存如何避免被GC扫描,BigCache实现原理

GC到底清理的是什么&#xff1f; Golang是函数式编程语言&#xff0c;如果是函数内定义的临时变量&#xff0c;在函数退出时会被自动清理掉不需要GC参与&#xff1b;如果使用了指针&#xff0c;那么即使函数退出了也不会将其清理&#xff0c;这个时候就需要全局的GC来清扫。 …

三大交易所全面恢复 IPO 申请

6月21日晚间&#xff0c;北交所受理了3家企业的IPO申请&#xff0c;这是北交所时隔3个月之后恢复IPO受理。6月20日晚间&#xff0c;沪深交易所各受理了1家IPO申请&#xff0c;这是沪深交易所时隔半年后再次受理IPO。这也意味着&#xff0c;三大交易所IPO受理全部恢复。 6月21日…

致敬企业家精神:比亚迪仰望发布“旷野宣言”

近年来&#xff0c;随着汽车在中国的普及&#xff0c;钟爱越野和探险的车主群体也在飞速发展壮大。 那么问题就来了&#xff1a;为什么会有这么多的人们钟爱越野和探险&#xff1f;越野精神究竟是什么&#xff1f; 作为备受关注的硬派越野车&#xff0c;比亚迪旗下的高端品牌仰…

编程精粹—— Microsoft 编写优质无错 C 程序秘诀 08:剩下的就是态度问题

这是一本老书&#xff0c;作者 Steve Maguire 在微软工作期间写了这本书&#xff0c;英文版于 1993 年发布。2013 年推出了 20 周年纪念第二版。我们看到的标题是中译版名字&#xff0c;英文版的名字是《Writing Clean Code ─── Microsoft’s Techniques for Developing》&a…