代码随想录算法训练营第四十七天|LeetCode123 买卖股票的最佳时机Ⅲ

题1:

指路:123. 买卖股票的最佳时机 III - 力扣(LeetCode)
思路与代码:

买卖股票专题中三者不同的是Ⅰ为只买卖一次,Ⅱ可多次买卖,Ⅲ最多可买卖两次。那么我们将买买卖行为分为五个状态部分(可延续前几天已有的状态,之前说过分两种情况,可延续前面已经买入/卖出,也可以是今天才买入/卖出)。定义一个数组dp[i][j],其中i为第i天,j为第j个状态,那么dp[i][j]的含义为第i天在状态j的情况下手头的最大现金。那么从j开始讨论:当j=0时,表示这一天对股票无操作,当j=1时表示第一次持有,当j=2时表示第一次卖出,当j=3时表示第二次买入,当j=4时表示第二次卖出。因为卖出状态时永远比买入状态时手头现金多,所以我们在第一次卖出和第二次卖出中求得较大值。在递推公式部分,第i天无操作的股票状态延续前一天,即dp[i][0]=dp[i-1][0],第一天买入的股票状态就是在前面说的延续状态和新开状态中取较大值,即dp[i][1]=max(dp[i-1][1], dp[i-1][0]-prices[i]),类似得出第一次卖出,第二次买入和第二次卖出的情况。注意的是,买入的时候要减去股票的买入金额(因为求的是手头的金额),卖出的时候要加上股票的卖出金额(卖出后手头就有钱了)。代码如下:

class Solution {
public:int maxProfit(vector<int>& prices) {if (prices.size() == 0) return 0;vector<vector<int>> dp(prices.size(), vector<int>(5, 0));dp[0][1] = -prices[0];  // 第一次买入dp[0][3] = -prices[0];  // 第二次买入 for (int i = 1; i < prices.size(); i++) {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 max(dp[prices.size() - 1][2], dp[prices.size() - 1][4]);}
};

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

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

相关文章

LeetCode 每日一题 2024/6/17-2024/6/23

记录了初步解题思路 以及本地实现代码&#xff1b;并不一定为最优 也希望大家能一起探讨 一起进步 目录 6/17 522. 最长特殊序列 II6/18 2288. 价格减免6/19 2713. 矩阵中严格递增的单元格数6/20 2748. 美丽下标对的数目6/21 LCP 61. 气温变化趋势6/22 2663. 字典序最小的美丽字…

WAAP的特性、功能以及优势

随着互联网技术的快速发展&#xff0c;Web应用程序和API已经成为企业日常运营中不可或缺的部分。然而&#xff0c;与此同时&#xff0c;网络攻击手段也愈发复杂和隐蔽&#xff0c;给企业的数据安全带来了严峻的挑战。为了应对这一挑战&#xff0c;WAAP&#xff08;WebApplicati…

fastapi+vue3+primeflex前后端分离开发项目第一个程序

安装axios axios是用来请求后端接口的。 https://www.axios-http.cn/docs/intro pnpm 是一个前端的包管理工具&#xff0c;当我们需要给前端项目添加新的依赖的时候&#xff0c;就可以使用pnpm install 命令进行安装。 pnpm install axios安装 primeflex primeflex是一个cs…

知乎客户端跨平台-Hybrid-调试实战

在开发上述功能的过程中&#xff0c;发现了 flipper 这个工具 flipper 提供了一个桌面客户端&#xff0c;然后这个桌面客户端提供了一个和手机客户端通信的机制&#xff0c;免去了 socket 服务的开销&#xff0c;依靠这个通信机制&#xff0c;我们可以把上述的功能复制过来 基…

Python数列求和

1 问题 如何用python解决数学问题&#xff1f;如何用python数列求和&#xff1f; 2 方法 代码清单 1 Courier New字体&#xff0c;23磅行间距>>> def sum_num(): input_num input("输入一个0-9的整数:") try: input_num int(input_num) …

AI时代的音乐革命:创作更简单,灵魂在哪里?

#AI在创造还是毁掉音乐# 我是李涛&#xff0c;一名音乐创作者&#xff0c;最近一直在思考一个问题&#xff1a;AI到底是在创造音乐&#xff0c;还是在毁掉音乐&#xff1f; 几个月前&#xff0c;我第一次接触到AI音乐创作工具。它让我震惊&#xff0c;只需要输入几个关键词&a…

Apollo9.0 PNC源码学习之Planning模块(一)—— 规划概览

0 前言 规划本质就是搜索问题,数学角度来看就是寻找函数最优解 规划模块复杂的就是相关的逻辑处理和过程计算 对于规划的三维问题,目前解决方案:降维+迭代 将SLT问题分解为ST和SL二维优化问题:在一个维度优化之后,再另一个维度再进行优化,最后整合成三维的轨迹。 虽然降…

人机交互中的真问题与假问题

在人机交互领域&#xff0c;存在一些真正的挑战和问题&#xff0c;这些问题影响着如何有效地设计、开发和使用人机界面和交互系统。具体涉及&#xff1a; 人机交互系统需要尽可能自然和普适&#xff0c;以便用户可以轻松理解和使用。例如&#xff0c;语音识别系统需要能够准确地…

Excel使用小技巧

1、快速求和 选中数据区域&#xff0c;然后按组合键<Alt> 2、Excel表格美化 选中单元格区域&#xff0c;插入——表格&#xff0c;确定。也可以按快捷键CtrlT。 3、多个单元格同时输入 选中所有单元格&#xff0c;在编辑栏输入数据&#xff0c;按下Ctrl键的同时&#xf…

How to create a langchain doc from an str

问题背景&#xff1a; Ive searched all over langchain documentation on their official website but I didnt find how to create a langchain doc from a str variable in python so I searched in their GitHub code and I found this : 在 langchain 的官方文档中&#…

链表题目之模拟类

还有一些题目是没有特别复杂的技巧&#xff0c;但是考察仔细程度以及基本的链表处理能力&#xff0c;从而考察在基本的逻辑处理上考虑的全面和细致层度。这类题目对于业务代码编码能力的鉴定的确是有一些帮助。 分隔链表(86) 题目&#xff1a;86. 分隔链表 把大于等于的放到一…

游戏工厂:AI(AIGC/ChatGPT)与流程式游戏开发

游戏工厂&#xff1a;AI&#xff08;AIGC/ChatGPT&#xff09;与流程式游戏开发 码客 卢益贵 ygluu 关键词&#xff1a;AI&#xff08;AIGC、ChatGPT、文心一言&#xff09;、流程式管理、好莱坞电影流程、电影工厂、游戏工厂、游戏开发流程、游戏架构、模块化开发 一、前言…

Vue76-路由对浏览器历史记录的影响

一、push模式 默认是push 二、replace模式 替换当前记录&#xff01; &#xff08;当前指针指向的那一条记录&#xff09; 三、小结

完全禁用 Windows Defender

你有没有这样的情况&#xff0c;安装软件时&#xff0c;关闭了Windows实时保护&#xff0c;过几天&#xff0c;打开软件时&#xff0c;发现里面的附件被吞噬&#xff0c;因为Defender又自动打开了&#xff0c;那么&#xff0c;有没有一款可以完全禁用Defender的工具&#xff0c…

年薪50w+的项目经理,手把手教你如何复盘

复盘是一种重要的学习和改进工具&#xff0c;对于项目经理来说&#xff0c;能帮助识别项目中的成功与失败&#xff0c;为未来的项目管理提供宝贵经验。 理论部分 定义目标。在开始复盘之前&#xff0c;明确复盘的目标是什么。是为了找出项目中的问题并提出解决方案&#xff0c…

Linux的设备模型

在设备模型出现以前,Linux的驱动存在以下问题: 1,设备和驱动没有分离。也就是说设备的信息是硬编码在驱动代码中的,这给驱动程序造成了极大的限制。如果硬件有所改动,那么必然要修改驱动代码。比如LED如果修改了管脚,那么就必然要修改驱动程序。这样就导致驱动的通用性很…

腾讯大牛,手把手教你建立自己的Android学习知识体系,附实例+面经+建议!

主要让我介绍了我的项目&#xff0c;又出了几个题让我做。 项目就是让我介绍我科研做的那个流式二维码数据传输系统&#xff0c;我介绍的时候面试官听的很仔细&#xff0c;让我详细介绍了拍到的二维码是如何定位、采样和识别转换成二进制流的。然后问我传输速率是多少&#xff…

Android开启wifi调试

1.首先需要电脑和手机设备在同一个局域网下 1.1 手机和电脑连接同一个wifi&#xff0c;这样就是在同一个局域网下 1.2 可以用手机开一个热点&#xff0c;然后电脑连接手机开启的热点&#xff0c;这样也算在同一个局域网下 2.开启手机设备的无线调试功能 这个功能好像是可以在…

yarn安装配置及使用教程

Yarn 是一款 JavaScript 的包管理工具&#xff0c;是 Facebook, Google, Exponent 和 Tilde 开发的一款新的 JavaScript 包管理工具&#xff0c;它提供了确定性、依赖关系树扁平化等特性&#xff0c;并且与 npm 完全兼容。以下是 Yarn 的安装及使用教程&#xff1a; Yarn 安装…

stm32学习笔记---新建工程步骤和点灯演示

目录 STM32的三种开发方式 基于寄存器的方式 基于库函数的方式 基于Hal库的方式 固件库介绍 新建基于标准库的工程步骤 配置寄存器来完成点灯操作 添加库函数来完成点灯操作 添加库函数 开始点灯操作 第一步&#xff1a;使能时钟 第二步&#xff1a;配置端口模式 …