当前位置: 首页 > news >正文

代码随想录算法训练营|day48

第九章 动态规划

  • 121.买卖股票的最佳时机
  • 122.买卖股票的最佳时机II
  • 代码随想录文章详解

121.买卖股票的最佳时机

本题中股票只能买卖一次
dp[i][0] 表示第i天不买入股票持有的最大现金;dp[i][1] 表示第i天买入股票持有的最大现金。

不买股票持有的最大现金买入股票持有的最大现金
前一天为未买入状态     dp[i-1][0]
前一天为买入状态,今天卖出 dp[i-1][1]+prices[i]
前一天为买入状态 dp[i-1][1]
今天为买入状态  -prices[i]
func maxProfit(prices []int) int {if len(prices) == 0 {return 0}dp := make([][]int, len(prices))for i := 0; i < len(prices); i++ {dp[i] = make([]int, 2)}dp[0][0] = 0dp[0][1] = -prices[0]for i := 1; i < len(prices); i++ {dp[i][0] = max(dp[i-1][0], dp[i-1][1]+prices[i])dp[i][1] = max(dp[i-1][1], -prices[i])}return dp[len(prices) - 1][0]
}

空间优化:可以看到第i天状态只依赖于第i-1天的状态,因此只需要记录前一天状态即可

func maxProfit(prices []int) int {if len(prices) == 0 {return 0}dp0, dp1 := 0, -prices[0]for i := 1; i < len(prices); i++ {dp0 = max(dp0, dp1+prices[i])dp1 = max(dp1, -prices[i])}return dp0
}

贪心:在历史最低点买入,最高点卖出

func maxProfit(prices []int) int {if len(prices) == 0 {return 0}minPrice := prices[0]res := 0for i := 1; i < len(prices); i++ {if prices[i] < minPrice {minPrice = prices[i]}res = max(res, prices[i]-minPrice)}return res
}

122.买卖股票的最佳时机II

较上题多了条件:股票可以进行多次买卖
dp[i][0] 表示第i天不买入股票持有的最大现金;dp[i][1] 表示第i天买入股票持有的最大现金。
所以在当天是买入状态时,持有的最大现金为前一天买入状态持有的最大现金前一天卖出今天买入后持有的最大现金的最大值

func maxProfit(prices []int) int {if len(prices) == 0 || len(prices) == 1 {return 0}dp := make([][]int, len(prices))for i := 0; i < len(prices); i++ {dp[i] = make([]int, 2)}dp[0][0] = 0dp[0][1] = -prices[0]for i := 1; i < len(prices); i++ {dp[i][0] = max(dp[i-1][0], dp[i-1][1]+prices[i])dp[i][1] = max(dp[i-1][1], dp[i-1][0]-prices[i])}return dp[len(prices)-1][0]
}

空间优化

func maxProfit(prices []int) int {if len(prices) == 0 || len(prices) == 1 {return 0}dp0, dp1 := 0, -prices[0]for i := 0; i < len(prices); i++ {dp0 = max(dp0, dp1+prices[i])dp1 = max(dp1, dp0-prices[i])}return dp0
}

贪心:只加正数
因为不限制交易次数,故只要今天股价比昨天高,就交易。

func maxProfit(prices []int) int {if len(prices) == 0 || len(prices) == 1 {return 0}sum := 0for i := 1; i < len(prices); i++ {if prices[i] > prices[i-1] {sum += prices[i] - prices[i-1]}}return sum
}

代码随想录文章详解

121.买卖股票的最佳时机
122.买卖股票的最佳时机II

相关文章:

代码随想录算法训练营|day48

第九章 动态规划 121.买卖股票的最佳时机122.买卖股票的最佳时机II代码随想录文章详解 121.买卖股票的最佳时机 本题中股票只能买卖一次 dp[i][0] 表示第i天不买入股票持有的最大现金&#xff1b;dp[i][1] 表示第i天买入股票持有的最大现金。 不买股票持有的最大现金买入股票…...

架构面试题汇总:并发和锁(三)

在现代软件开发中&#xff0c;并发编程和多线程处理已成为不可或缺的技能。Java作为一种广泛使用的编程语言&#xff0c;提供了丰富的并发和多线程工具&#xff0c;如锁、同步器、并发容器等。因此&#xff0c;对于Java开发者来说&#xff0c;掌握并发编程和多线程处理的知识至…...

蓝桥杯(3.2)

1209. 带分数 import java.io.*;public class Main {static BufferedReader br new BufferedReader(new InputStreamReader(System.in));static PrintWriter pw new PrintWriter(new OutputStreamWriter(System.out));static final int N 10;static int n, cnt;static int[…...

[数据集][目标检测]鸟类检测数据集VOC+YOLO格式11758张200类别

数据集格式&#xff1a;Pascal VOC格式YOLO格式(不包含分割路径的txt文件&#xff0c;仅仅包含jpg图片以及对应的VOC格式xml文件和yolo格式txt文件) 图片数量(jpg文件个数)&#xff1a;11758 标注数量(xml文件个数)&#xff1a;11758 标注数量(txt文件个数)&#xff1a;11758 标…...

YOLOv9:使用可编程梯度信息学习您想学习的内容

摘要 arxiv.org/pdf/2402.13616.pdf 当今的深度学习方法侧重于如何设计最合适的目标函数,以便模型的预测结果能最接近于实际结果。同时,还必须设计一个适当的架构,以便于获取足够的预测信息。现有的方法忽略了一个事实,即当输入数据经历层层特征提取和空间变换时,会损失…...

uniapp:使用DCloud的uni-push推送消息通知(在线模式)java实现

uniapp:使用DCloud的uni-push推送消息通知&#xff08;在线模式&#xff09;java实现 1.背景 今天开发app的时候遇到一个需求&#xff1a; 业务在出发特定条件的时候向对应的客户端推送消息通知。 为什么选择在线模式&#xff0c;因为我们使用的是德邦类似的手持终端&#xf…...

【简说八股】面试官:你知道什么是AOP么?

回答 AOP(Aspect-Oriented Programming)&#xff0c;即面向切面编程&#xff0c;是一种编程范式&#xff0c;它的主要思想是将应用程序中的横切关注点&#xff08;如日志记录、性能统计、安全控制等&#xff09;从业务逻辑中剥离出来&#xff0c;然后通过特殊的方式将这些横切…...

ASUS华硕天选5笔记本电脑FX607JV原装出厂Win11系统下载

ASUS TUF Gaming F16 FX607JV天选五原厂Windows11系统 适用型号&#xff1a; FX607JU、FX607JI、FX607JV、 FX607JIR、FX607JVR、FX607JUR 下载链接&#xff1a;https://pan.baidu.com/s/1l963wqxT0q1Idr98ACzynQ?pwd0d46 提取码&#xff1a;0d46 原厂系统自带所有驱动、…...

Unity(第二十一部)动画的基础了解(感觉不了解其实也行)

1、动画组件老的是Animations 动画视频Play Automatically 是否自动播放Animate Physics 驱动方式&#xff0c;勾选后是物理驱动Culling Type 剔除方式 默认总是动画化就会一直执行下去&#xff0c;第二个是基于渲染播放&#xff08;离开镜头后不执行&#xff09;&#xff0c; …...

写时复制简介

写时复制技术(Copy on Write)是比较常用的一种技术&#xff0c;它的主要目的是延迟减少以及延迟内存的分配&#xff0c;增加执行效率&#xff0c;只有在真正进行写操作的过程中才会真正分配物理资源。同时&#xff0c;也可以保护数据在系统崩溃时出现的丢失。比如&#xff0c;我…...

运行Python文件时出现‘utf-8’code can‘t decode byte 如何解决?(如图)

如图 亦或者出现“SyntaxError: Non-UTF-8 code starting with \xbb ” 出现这种问题往往是编码格式导致的&#xff0c;我们可以在py文件中的第一行加入以下代码&#xff1a; # codingutf-8或者 # codinggdk优先使用gbk编码 解释一下常用的两种编码格式&#xff1a; utf-…...

行为树入门:BehaviorTree.CPP Groot2练习(叶子节点)(2)

以《行为树BehaviorTree学习记录1_基本概念》练习。 1 SequenceNode顺序控制节点 代码下载 git clone https://gitee.com/Luweizhiyuan2020/ros2_bt.git例程 1.1 sequence 顺序执行 下载版本SequenceNode1。 1.2 ReactiveSequence 异步执行 注意&#xff1a; ①only a…...

leetcode-字符串中的单词数

434. 字符串中的单词数 题解&#xff1a; 这个问题可以通过遍历字符串&#xff0c;当遇到非空格字符时&#xff0c;判断其前一个字符是否为空格&#xff0c;如果是&#xff0c;则说明这是一个新的单词的开始&#xff0c;计数器加一。最后返回计数器的值即可。 class Solutio…...

一些C语言题目

求10个整数中最大值 #include <stdio.h>//求10个整数中最大值 int main() {int arr[10]{2,5,8,6,19,1,7,3,11,3};int i 0;int max 0;/*for(i 0;i < 10;i){scanf("%d",&arr[i]);}*/for(i 0;i < 10;i){if(arr[i] > max)max arr[i];}printf(&q…...

JVM相关问题

JVM相关问题 一、Java继承时父子类的初始化顺序是怎样的&#xff1f;二、JVM类加载的双亲委派模型&#xff1f;三、JDK为什么要设计双亲委派模型&#xff0c;有什么好处&#xff1f;四、可以打破JVM双亲委派模型吗&#xff1f;如何打破JVM双亲委派模型&#xff1f;五、什么是内…...

32单片机基础:旋转编码器计次

接线图如上图所示。 我们初始化一下PB0和PB1两个GPIO口外设中断&#xff0c;当然&#xff0c;这里只初始化一个外部中断也能完成功能的对于编码器而言&#xff0c;下图所示为正转的波形。如果把一相的下降沿用作触发中断&#xff0c;在中断时刻读取另一相的电平&#xff0c;正…...

【C++】vector的使用和模拟实现(超级详解!!!!)

文章目录 前言1.vector的介绍及使用1.1 vector的介绍1.2 vector的使用1.2.1 vector的定义1.2.2 vector iterator 的使用1.2.3 vector 空间增长问题1.2.3 vector 增删查改1.2.4 vector 迭代器失效问题。&#xff08;重点!!!!!!&#xff09;1.2.5 vector 在OJ中有关的练习题 2.ve…...

GO学习记录

这里写目录标题 00 环境01 语言基础二级目录三级目录 00 环境 参考的&#xff1a;https://www.liwenzhou.com/posts/Go/install/ 编译运行&#xff1a; go mod init <项目名> // 在目录下创建项目 go mod init <项目名> // 编译go run <文件名>.go …...

迭代器模式(Iterator Pattern)

定义 迭代器模式&#xff08;Iterator Pattern&#xff09;是一种行为型设计模式&#xff0c;它提供了一种方法来顺序访问聚合对象中的各个元素&#xff0c;而不需要暴露该对象的内部表示。迭代器模式使得客户端代码能够独立于聚合对象的具体实现进行遍历操作。 在迭代器模式…...

KL divergence(KL 散度)详解

本文用一种浅显易懂的方式说明KL散度。 参考资料 KL散度本质上是比较两个分布的相似程度。 现在给出2个简单的离散分布&#xff0c;称为分布1和分布2. 分布1有3个样本&#xff0c; 其中A的概率为50%, B的概率为40%&#xff0c;C的概率为10% 分布2也有3个样本&#xff1a; 其…...

3分钟免费搞定专业条码!Libre Barcode字体终极指南

3分钟免费搞定专业条码&#xff01;Libre Barcode字体终极指南 【免费下载链接】librebarcode Libre Barcode: barcode fonts for various barcode standards. 项目地址: https://gitcode.com/gh_mirrors/li/librebarcode 还在为复杂的条码生成工具而烦恼吗&#xff1f;…...

Windows游戏多开检测实战:从进程枚举到信号量的5种实现与破解技巧

Windows游戏多开检测与破解&#xff1a;5种核心机制深度解析 在游戏开发和运营过程中&#xff0c;限制同一台设备上同时运行多个游戏实例是常见的需求。这种机制不仅关乎商业利益保护&#xff0c;也涉及游戏平衡性和反作弊系统的有效性。对于技术爱好者而言&#xff0c;理解这些…...

3大战略优势:如何通过Axure本地化解决方案提升团队设计效率与协作效能

3大战略优势&#xff1a;如何通过Axure本地化解决方案提升团队设计效率与协作效能 【免费下载链接】axure-cn Chinese language file for Axure RP. Axure RP 简体中文语言包。支持 Axure 11、10、9。不定期更新。 项目地址: https://gitcode.com/gh_mirrors/ax/axure-cn …...

互联网大厂Java求职者面试实录:严肃面试官VS搞笑水货程序员小李

互联网大厂Java求职者面试实录&#xff1a;严肃面试官VS搞笑水货程序员小李 第一轮提问&#xff1a;Java基础与多线程 面试官&#xff1a;小李&#xff0c;Java中HashMap的工作原理是什么&#xff1f;当多线程并发访问时会出现什么问题&#xff1f; 小李&#xff1a;HashMap就是…...

PPTist:基于Vue3与TypeScript的在线演示文稿技术架构解析

PPTist&#xff1a;基于Vue3与TypeScript的在线演示文稿技术架构解析 【免费下载链接】PPTist PowerPoint-ist&#xff08;/pauəpɔintist/&#xff09;, An online presentation application that replicates most of the commonly used features of MS PowerPoint, allowing…...

如何快速激活Windows和Office:KMS_VL_ALL_AIO新手指南

如何快速激活Windows和Office&#xff1a;KMS_VL_ALL_AIO新手指南 【免费下载链接】KMS_VL_ALL_AIO Smart Activation Script 项目地址: https://gitcode.com/gh_mirrors/km/KMS_VL_ALL_AIO KMS_VL_ALL_AIO是一款开源的智能激活脚本工具&#xff0c;专为Windows和Office…...

SimpleX协议标准化之路:终极隐私通信的完整指南

SimpleX协议标准化之路&#xff1a;终极隐私通信的完整指南 SimpleX是全球首个完全不需要任何用户标识符的通信平台&#xff0c;为隐私保护设立了新的标准。作为100%隐私设计理念的先行者&#xff0c;SimpleX通过其革命性的协议架构&#xff0c;彻底改变了我们对安全通信的认知…...

Python 执行式AI:必备基础与语法速查

Python 执行式AI&#xff1a;必备基础与语法速查&#x1f4dd; 本章学习目标&#xff1a;本章是入门认知部分&#xff0c;帮助零基础读者建立对AI Agent的初步认知。通过本章学习&#xff0c;你将全面掌握"Python 执行式AI&#xff1a;必备基础与语法速查"这一核心主…...

深入解析Android Verified Boot (AVB):从启动链到镜像验证的完整机制

1. Android Verified Boot (AVB) 是什么&#xff1f; 当你按下手机电源键时&#xff0c;系统会经历一系列复杂的启动过程。AVB&#xff08;Android Verified Boot&#xff09;就是在这个过程中确保每一步加载的代码都未被篡改的安全卫士。想象一下&#xff0c;这就像机场的安检…...

CADSpotting+: Enhancing Panoptic Symbol Recognition in Large-Scale CAD Drawings with Dynamic Point S

1. CADSpotting&#xff1a;大规模CAD图纸中的全景符号识别新突破 想象一下你手里有一张复杂的建筑CAD图纸&#xff0c;上面密密麻麻布满了各种符号——门窗、墙体、家具、电气设备……传统方法要识别这些符号就像在迷宫里找路&#xff0c;而CADSpotting的出现&#xff0c;就像…...