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

LC:动态规划-买卖股票

文章目录

  • 121. 买卖股票的最佳时机
  • 122. 买卖股票的最佳时机 II
  • 714. 买卖股票的最佳时机含手续费
  • 309. 买卖股票的最佳时机含冷冻期

121. 买卖股票的最佳时机

链接:https://leetcode.cn/problems/best-time-to-buy-and-sell-stock/description/
在这里插入图片描述
使用贪心,直接秒了,需要注意的是,由于题目所说股票只能购买一次,所以不存在累加的情况,对比下面第二题思考:
代码:

class Solution {public int maxProfit(int[] prices) {// 只能有一直股票,所以价格不能够累加,只拥有一直股票。int minPrice = prices[0];int ans = 0;for(int price : prices){ans = Math.max(ans, price - minPrice);minPrice = Math.min(minPrice, price);}return ans;}
}

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

题目链接:https://leetcode.cn/problems/best-time-to-buy-and-sell-stock-ii/description/
在这里插入图片描述
方法一:直接使用贪心,类似第一题,本题最大不同在于可以多次购买并且出售股票,只需要保证每次购买后出售股票中获取利润大于0即可,随后将遍历过程中获取到的所有利润相加,并且需要及时更新上次购买股票的价格:prevPrice即可。
代码如下:

class Solution {public int maxProfit(int[] prices) {// 直接贪心int ans = 0;int prevPrice = prices[0];for(int price : prices){if(price - prevPrice > 0){ans += price - prevPrice;}prevPrice = price;}return ans;}
}

方法二:动态规划 秒了,设二维dp数组,dp[i][0]表示第i天不持有能够获得的最大利润,dp[i][1]表示第 i 天持有股票能够获取的最大利润。
注意需要初始化第一天的利润值:dp[0][0] = 0,dp[0][1] = -prices[0];
具体动态数组递推公式参考下面代码:

class Solution {public int maxProfit(int[] prices) {// 动态规划,dp[i][0]表示第i天不持有股票能够获取的最大利润,dp[i][1]表示第i天持有股票能够获取的最大利润int m = prices.length;int[][] dp = new int[m][2];dp[0][0] = 0; dp[0][1] = -prices[0];for(int i = 1; i < m; 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]);}return Math.max(dp[m - 1][0], dp[m - 1][1]);}
}

对于动态规划的理解,是解决下面变形题的关键。

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

题目链接:https://leetcode.cn/problems/best-time-to-buy-and-sell-stock-with-transaction-fee/
在这里插入图片描述
带手续费的题目本质上和上面题目使用动态规划解决并无差异。
首先需要明确题目意思,题目说道,每笔交易需要支付一笔手续费,并且这个手续费指的是买入、卖出这整个过程。 借助此,我们可以将手续费统一到购买股票的时候支付,此后题目就和上述动态规划一样。
代码如下:

class Solution {public int maxProfit(int[] prices, int fee) {// 动态规划// dp[i][0]表示第i天不持有股票能够获取的最大利润// dp[i][1]表示第i天持有股票能够获取的最大利润// 并且规定股票的手续费全部在买入的时候付,卖出的时候不需要付手续费int len = prices.length;int[][] dp = new int[len][2];dp[0][0] = 0;dp[0][1] = -prices[0] - fee;for(int i = 1; i < len; 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[len - 1][0], dp[len - 1][1]);}
}

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

题目链接:https://leetcode.cn/problems/best-time-to-buy-and-sell-stock-with-cooldown/
在这里插入图片描述
第一次看到题目联想到的是在上面两道动态规划的基础上修改一番,仍然使用两个变量表示0表示不持有股票,1表示持有股票。但此时存在一个问题:对于dp[i][0] 不持有股票的表示,无法确定对于某一天「是前一天不持有股票还是前一天持有股票随后将股票卖掉而出现的新的不持有股票的状态。」对于这两种不同的状态采用的处理方式也不同,所以使用两种状态进行动态规划存在状态歧义。意识到这一点后,在两个状态变量的基础上添加新的一个新的状态。此时使用dp[len][3]进行递归。

  • dp[i][0]:表示第i天不持有股票且未卖出股票。
  • dp[i][1]:表示第i天不持有股票且可能有卖出股票。
  • dp[i][2]:表示第i天持有股票。

具体状态转移公式及参考下面代码:

class Solution {public int maxProfit(int[] prices) {// 动态规划int len = prices.length;int[][] dp = new int[len][3];// dp[i][0]不持有未卖出 dp[i][1]不持有有卖出 dp[i][2]持有dp[0][0] = 0;dp[0][1] = 0;dp[0][2] = -prices[0];for(int i = 1; i < len; i++){dp[i][0] = Math.max(dp[i - 1][0], dp[i - 1][1]);dp[i][1] = Math.max(dp[i - 1][1], dp[i - 1][2] + prices[i]);dp[i][2] = Math.max(dp[i - 1][2], dp[i - 1][0] - prices[i]);}return Math.max(dp[len - 1][0], Math.max(dp[len - 1][1], dp[len - 1][2]));}
}

相关文章:

LC:动态规划-买卖股票

文章目录 121. 买卖股票的最佳时机122. 买卖股票的最佳时机 II714. 买卖股票的最佳时机含手续费309. 买卖股票的最佳时机含冷冻期 121. 买卖股票的最佳时机 链接&#xff1a;https://leetcode.cn/problems/best-time-to-buy-and-sell-stock/description/ 使用贪心&#xff0c…...

FLINK SQL 任务参数

在Flink SQL任务中&#xff0c;参数配置对于任务的性能和稳定性至关重要。以下是对运行时参数、优化器参数和表参数的详细解析&#xff1a; 一、运行时参数 运行时参数主要影响Flink作业在执行过程中的行为。以下是一些关键的运行时参数&#xff1a; 并行度&#xff08;Para…...

HCIP——以太网交换安全(四)DHCP Snooping

目录 一、DHCP Snooping的知识点 二、DHCP Snooping实验拓扑 三、总结 一、DHCP Snooping的知识点 1.1、DHCP snooping 概述&#xff1a; ①DHCP Snooping使能DHCP的一种安全特性&#xff0c;用于保证DHCP客户端从合法的DHCP服务端获取IP地址。DHCP服务器记录DHCP客户端IP…...

k8s worker 节点关机 sts 管理的 pod 无法迁移

背景 1.28.2 版本 k8s 中的一台 worker 节点内存异常&#xff0c;需要关机换内存&#xff0c;正好可以测试一下 pod 的迁移。 发现 deployment 管理的 pod 是能够重新创建飘到其他节点上的&#xff0c;但是 statefulset 管理的 pod 一直处于 Terminating 状态无法迁移&#…...

排序04 视频播放建模

视频播放时长 用p拟合y&#xff0c;t是用户的实际观看时长&#xff0c;用y和p熵作为损失函数&#xff0c;使得p接近y。 输出z,对z做sigmoid变换。 exp(z)可以视为对播放时长的预估 视频完播 回归方法 二元分类方法 调整&#xff1a;预估完播率不能直接使用...

【常见大模型API调用】第三篇:清华智谱--智谱AI

1. 公司及模型介绍 智谱AI是一家由清华大学计算机系知识工程实验室的技术成果转化而来的AI知识智能技术开发商。智谱AI致力于打造新一代认知智能大模型&#xff0c;专注于做大模型的中国创新。 2024年1月16日&#xff0c;智谱AI在首届技术开放日上发布了新一代基座大模型GLM-…...

LayerSkip – Meta推出加速大型语言模型推理过程的技术

我们提出的 LayerSkip 是一种端到端的解决方案&#xff0c;可加快大型语言模型&#xff08;LLM&#xff09;的推理速度。 首先&#xff0c;在训练过程中&#xff0c;我们采用了层间丢弃技术(layer dropout)&#xff0c;早期层间丢弃率较低&#xff0c;后期层间丢弃率较高。 其次…...

环境变量与本地变量(Linux)

引言 在当今的计算机技术领域&#xff0c;Linux操作系统以其稳定性和灵活性而广受欢迎。它不仅是服务器和开发者的首选平台&#xff0c;也是探索计算机科学和系统编程的宝库。在这个强大的操作系统中&#xff0c;环境变量与本地变量扮演着至关重要的角色&#xff0c;它们是管理…...

【完-网络安全】Windows防火墙及出入站规则

文章目录 防火墙入站和出站的区别域网络、专用网络、公用网络的区别 防火墙 防火墙默认状态一般是出站允许&#xff0c;入站阻止。 入站和出站的区别 入站就是别人来访问我们的主机&#xff0c;也就是正向shell的操作 出站就是反向shell&#xff0c;主机需要主动连接kali&am…...

Vue学习记录之十七 css中样式穿透及新特征介绍

一、scoped原理 在vue页面的css中,有一个设置为scoped,使用以后dom的节点会出现下面的规则。其实我们打完包就是一个html页面,如果不做处理,将会导致css混乱。 给HTML的DOM节点加一个不重复data属性(形如:data-v-123)来表示他的唯一性在每句css选择器的末尾(编译后的生成的…...

Nature 正刊丨海洋涡旋中常见的地下热浪和寒潮

01摘要 由于全球变暖&#xff0c;极端海洋温度事件变得越来越普遍&#xff0c;造成了灾难性的生态和社会经济影响1,2,3,4,5。尽管基于卫星观测对表层海洋热浪&#xff08;MHW&#xff09;和海洋寒潮&#xff08;MCS&#xff09;进行了广泛的研究6,7&#xff0c;但我们对这些极…...

代码随想录算法训练营第六十二天| prim算法,kruskal算法

训练营六十二天打卡&#xff0c;图论比较难&#xff0c;坚持下来胜利就在眼前&#xff01; 53.卡码网【寻宝】 题目链接 解题过程 没做过类似的题目&#xff0c;跟着答案敲了一遍最小生成树 可以使用 prim算法 也可以使用 kruskal算法计算出来。prim算法 是从节点的角度 采用…...

Newstar_week1_week2_wp

week1 wp crypto 一眼秒了 n费马分解再rsa flag&#xff1a; import libnum import gmpy2 from Crypto.Util.number import * p 9648423029010515676590551740010426534945737639235739800643989352039852507298491399561035009163427050370107570733633350911691280297…...

今天我们研究一段代码(异或位运算)

let a 18 // 甲 let b 20 // 乙a a ^ b b a ^ b a a ^ b console.log("a",a) // a 20 console.log("b",b) // b 18今天我们就研究上面这一段代码&#xff0c;简单解释一下&#xff0c;初始化一个a 18 b 20&#xff0c; 中间经过了三次的异或之后…...

pycharm中使用ctrl+鼠标滚轮改变字体大小

文章目录 pycharm使用ctrl鼠标滚轮改变字体大小1.打开pycharm选择file2.选择setting4.选择keymap&#xff0c;然后再右边的输入框中输入increase进行增大字体4.鼠标选择后&#xff0c;点击添加鼠标快捷方式&#xff0c;然后设置鼠标滚轮往上增大字体。5.设置缩小字体&#xff0…...

【算法-动态规划】打家劫舍专题

文章目录 1.打家劫舍1.1一维数组1.2三变量法1.3双数组法 2.打家劫舍22.1双数组法2.2 三变量法 3.打家劫舍33.1动态规划3.2双变量法 4.删除相邻数字的最大分数4.1双状态数组4.2一维数组4.3三变量法 1.打家劫舍 198. 打家劫舍 - 力扣&#xff08;LeetCode&#xff09; 1.1一维数…...

关于技术管理者的一些思考

前 言 在软件开发领域&#xff0c;当一名资深工程师有机会成为一名技术管理者的时候&#xff0c;通常他/她的反应是什么&#xff1f;兴奋、担扰、无奈还是推托&#xff0c;具体是什么心情也许对结果并不重要&#xff0c;更加重要是在一刻&#xff0c;我们一定要问问我们内心的…...

Alpha-CLIP: A CLIP Model Focusing on Wherever You Want CVPR 2024

在原始的接受RGB三通道输入的CLIP模型的上额外增加了一个alpha通道。在千万量级的RGBA-region的图像文本对上进行训练后&#xff0c;Alpha-CLIP可以在保证CLIP原始感知能力的前提下&#xff0c;关注到任意指定区域。 GitHub - SunzeY/AlphaCLIP: [CVPR 2024] Alpha-CLIP: A CLI…...

Golang | Leetcode Golang题解之第495题提莫攻击

题目&#xff1a; 题解&#xff1a; func findPoisonedDuration(timeSeries []int, duration int) (ans int) {expired : 0for _, t : range timeSeries {if t > expired {ans duration} else {ans t duration - expired}expired t duration}return }...

04 go语言(golang) - 变量和赋值过程

变量 在Go语言中&#xff0c;变量的定义和初始化是编程的基础部分。Go提供了多种方式来声明和初始化变量&#xff0c;以适应不同的使用场景。 基本变量声明 使用var关键字&#xff1a; 使用var关键字可以在函数内部或外部声明变量。如果在函数外部声明&#xff0c;该变量为全…...

在不确定的命题环境中,如何建立稳定的考研数学备考体系

近两年&#xff0c;考研数学始终是考研备考中讨论度较高的科目。每年考试结束后&#xff0c;关于试卷难度、题型变化、计算量以及复习节奏的讨论都会迅速升温。对考生而言&#xff0c;真正需要关注的并不只是某一年试题“偏难”还是“偏易”&#xff0c;而是在变化之中建立一套…...

Linux文本管道效率稳定性治理方法

Linux文本管道效率稳定性治理方法这是一篇面向中级 Linux 使用者的技术文章&#xff0c;主题聚焦在文本管道效率&#xff0c;重点讨论管道组合、文本过滤和执行开销。在真实生产环境中&#xff0c;文本管道效率相关问题往往不会以单一错误形式出现&#xff0c;而是混杂在日志、…...

超越点灯:深入探索高云FPGA云源软件的高级调试与优化功能(逻辑分析仪+时序约束实战)

超越点灯&#xff1a;深入探索高云FPGA云源软件的高级调试与优化功能&#xff08;逻辑分析仪时序约束实战&#xff09; 当LED流水灯项目已经无法满足你的FPGA开发需求时&#xff0c;意味着你正站在从入门到进阶的关键转折点。高云FPGA平台提供的云源软件不仅支持基础开发&#…...

RT-Thread Studio自定义工程路径踩坑记:解决‘Error retrieving output from the rttconfig server’报错

RT-Thread Studio自定义工程路径踩坑指南&#xff1a;从报错到原理的深度解析 第一次在RT-Thread Studio中尝试将项目放在D盘的自定义文件夹时&#xff0c;那个刺眼的红色报错框让我愣了几秒——"Error retrieving output from the rttconfig server"。控制台里密密麻…...

Token工厂:无锡部署昇腾384超节点算力集群,制造Token

AI智能体正在成为人工智能发展新范式&#xff0c;Token调用量暴增&#xff0c;拉动算力产业链资本开支迅猛加速。据央视新闻&#xff0c;今年3月&#xff0c;我国日均Token调用量超140万亿&#xff0c;相比2024年初增长1000多倍。AI模型使用成本水涨船高&#xff0c;不少从业者…...

告别预编译包!手把手教你为Qt6项目定制编译OpenCV,解锁WITH_QT支持

告别预编译包&#xff01;手把手教你为Qt6项目定制编译OpenCV&#xff0c;解锁WITH_QT支持 在计算机视觉开发领域&#xff0c;OpenCV无疑是使用最广泛的库之一。然而&#xff0c;许多开发者可能没有意识到&#xff0c;直接从官网下载的预编译版本OpenCV可能无法充分发挥其与Qt框…...

【LeetCode】50. pow(x,n) 题解

【LeetCode】50. pow(x,n)\text{pow}(x,n)pow(x,n) 题解 Link: https://leetcode.cn/problems/powx-n/ 实现 pow(x, n) &#xff0c;即计算 xxx 的整数 nnn 次幂函数&#xff08;即 xnx^nxn&#xff09;。 其中 xxx 是浮点数&#xff0c;nnn 是可正可负的 323232 位有符号整…...

【开源】基于 ASP.NET Core Blazor Server 10.0 构建的学生信息查询系统

学生查询系统基于 ASP.NET Core Blazor Server 10.0 构建的学生信息查询系统&#xff0c;使用 Excel 文件作为数据源&#xff0c;支持动态列适配和响应式布局。功能特性灵活查询&#xff1a;支持按姓名、学号进行模糊查询&#xff0c;可单独或组合使用动态列适配&#xff1a;不…...

深入浅出:STM32 USB BOS描述符与WCID配置详解(以WinUSB免驱为例)

STM32 USB BOS描述符与WCID配置实战解析&#xff1a;从协议到代码实现 在嵌入式开发领域&#xff0c;USB设备与主机系统的无缝对接一直是开发者关注的重点。传统USB设备在Windows平台上通常需要安装专用驱动程序&#xff0c;这不仅增加了用户使用门槛&#xff0c;也提高了开发维…...

利用coze使用无代码平台搭建图片识别机器人

利用coze使用无代码平台搭建图片识别机器人 无代码平台允许用户通过可视化界面快速创建聊天机器人&#xff0c;无需编程基础。例如&#xff0c;扣子&#xff08;Coze&#xff09; 是一个由字节跳动开发的智能体应用开发平台&#xff0c;支持集成多种大语言模型&#xff08;如 …...