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

代码随想录算法训练营第四十九天|121. 买卖股票的最佳时机、122. 买卖股票的最佳时机 II

第九章 动态规划part10

121. 买卖股票的最佳时机

给定一个数组 prices ,它的第 i 个元素 prices[i] 表示一支给定股票第 i 天的价格。

你只能选择 某一天 买入这只股票,并选择在 未来的某一个不同的日子 卖出该股票。设计一个算法来计算你所能获取的最大利润。

返回你可以从这笔交易中获取的最大利润。如果你不能获取任何利润,返回 0 。

思路:记录当前的最低价格,使用当前价格与最低价格之差获取当前最大利润。(使用贪心法)

class Solution {
public:int maxProfit(vector<int>& prices) {int min=INT_MAX;int profit=INT_MIN;for(int i=0;i<prices.size();i++){if(prices[i]<=min)  min=prices[i];if(prices[i]-min>profit)  profit=prices[i]-min;}return profit;}
};
  • 时间复杂度:O(n)
  • 空间复杂度:O(1)

 使用动态规划

感觉跟贪心法基本差不多,dp[i][0]其实也相当于找当前的最小买入价格,dp[i][1]则相当于找目前能够卖出的最大价格,只是采用了状态转移方式来解决。

class Solution {
public:int maxProfit(vector<int>& prices) {vector<vector<int>> dp(prices.size(),vector<int>(2,0));dp[0][0]=-prices[0];dp[0][1]=0;for(int i=1;i<prices.size();i++){dp[i][0]=max(dp[i-1][0],-prices[i]);dp[i][1]=max(dp[i-1][1],prices[i]+dp[i-1][0]);}return dp[prices.size()-1][1];}
};
  • 时间复杂度:O(n)
  • 空间复杂度:O(n)

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

给你一个整数数组 prices ,其中 prices[i] 表示某支股票第 i 天的价格。

在每一天,你可以决定是否购买和/或出售股票。你在任何时候 最多 只能持有 一股 股票。你也可以先购买,然后在 同一天 出售。

返回 你能获得的 最大 利润 。

本题思路与上一题基本一致,不同之处在于递推公式:

dp含义与上一题相同:

dp[i][0]:第i天持有股票所得最多现金;

dp[i][1]:第i天不持有股票所得最多现金;

递推公式推导:

dp[i][0]:第i天持有股票由两种状态转移可以得到:

①第i-1天持有股票且第i天不卖出;

②第i-1天不持有股票且第i天买入;

dp[i][1]:第i天持有股票可有两种状态转移得到:

①第i-1天不持有股票且第i天不买入,

②第i-1天持有股票且第i天卖出。

class Solution {
public:int maxProfit(vector<int>& prices) {vector<vector<int>> dp(prices.size(),vector<int>(2,0));dp[0][0]=-prices[0];dp[0][1]=0;for(int i=1;i<prices.size();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[prices.size()-1][1];}
};

 这两道题充分感受到了状态转移,使用动态规划一定要想好递推公式代表的是什么状态的转移。

 

相关文章:

代码随想录算法训练营第四十九天|121. 买卖股票的最佳时机、122. 买卖股票的最佳时机 II

第九章 动态规划part10 121. 买卖股票的最佳时机 给定一个数组 prices &#xff0c;它的第 i 个元素 prices[i] 表示一支给定股票第 i 天的价格。 你只能选择 某一天 买入这只股票&#xff0c;并选择在 未来的某一个不同的日子 卖出该股票。设计一个算法来计算你所能获取的最…...

Rust教程6:并发编程和线程通信

文章目录 线程初步join方法线程通信 Rust系列&#xff1a;初步⚙所有权⚙结构体和枚举类⚙函数进阶⚙泛型和特征 线程初步 在Rust中&#xff0c;开启多线程进行并发编程&#xff0c;只需调用thread::spawn&#xff0c;但这里有一个坑点&#xff0c;即spawn函数只有一个传入参…...

JVM在线分析-监控工具(jps, jstat, jstatd)

参考官方文档&#xff08;jdk11&#xff09; https://docs.oracle.com/en/java/javase/11/tools/troubleshooting-tools-and-commands.html#GUID-CB44BFBA-E5F9-4D80-8EE8-28E9F16BC451 1. 监控工具(jps, jstat, jstatd) jps -q Suppresses the output of the class name, J…...

Console LDAP 配置解密

之前通过短视频向大家介绍了 Console 如何集成 LDAP&#xff0c;但很多小伙伴反映按照视频里的配置后不成功。今天就结合小伙伴们反映的问题来跟大家详细介绍一下。 Console LDAP 完整的配置参数如下&#xff1a; 名称类型说明hoststringLDAP 服务器地址portintLDAP 服务器端口…...

node插件MongoDB(三)—— 库mongoose 的使用和数据类型(一)

前言 提示&#xff1a;使用mongoose 的前提是你安装了node和 MongoDB。 mongoose 官网文档&#xff1a;http://mongoosejs.net/docs/index.html 文章目录 前言一、安装二、基本使用1. 打开bin目录的mongod.exe文件2. 基本使用的代码&#xff08;连接mongodb 服务&#xff09;3.…...

基础(二)

基础&#xff08;二&#xff09; 字符串型 C风格&#xff1a;char 变量名[] “字符串值”&#xff1b; C风格&#xff1a;string 变量名 “字符串值” #include <iostream> using namespace std; #include <string>int main() {// C风格char str1[] "h…...

思维模型 目标效应

本系列文章 主要是 分享 思维模型&#xff0c;涉及各个领域&#xff0c;重在提升认知。明确目标&#xff0c;激发内在动机。 1 目标效应的应用 1.1 目标效应在教育领域的应用-棉花糖实验 美国斯坦福大学心理学系的教授米歇尔&#xff08;Walter Mischel&#xff09;曾经进行了…...

【从0到1设计一个网关】性能优化---Netty线程数配置与JVM参数配置

文章目录 Netty线程介绍Netty实战配置JVM参数与ZGCJVM与ZGC调优Netty线程介绍 在Netty中有两个比较重要的线程概念,一个是BOSS线程,一个是Woker线程。 Boss线程组: Boss线程组通常负责处理接受客户端连接的工作,即处理ServerSocketChannel的连接事件。 Boss线程会监听并接…...

node插件MongoDB(五)—— 库mongoose 的模块化(五)

文章目录 一、使用mongoose 模块化的原因二、准备工作2. 启动mongo.exe 和mongod.exe 两个程序连接数据库 三、基本模块的拆分1、基本逻辑2、代码3、代码图示说明 四、在index.js 中进一步的拆分1.拆分原因2.新建model文件夹存储文档的结构对象3.代码4.代码实际演示和注意点 一…...

Windows server 2008 R2 IIS搭建ASP网站教程

一、安装应用程序服务器 提示安装成功 二、添加角色服务asp 三、asp网站配置 放入源码 设置网站首页为index.asp: 设置应用程序池 四、设置网站目录属性 五、access数据库连接配置 Cd c:\Windows\System32\inetsrv appcmd list apppool /xml | appcmd set apppool /…...

Linux之基础开发工具gdb调试器的使用(三)

文章目录 一、Linux调试器-gdb使用1、安装gdb2、背景3、Debug和release4、区分Debug和release 二、Linux调试器-gdb命令演示1、显示指定行之后的代码&#xff08;自动记录最后一条指令&#xff09;2、断点1、打印断点2、查看断点3、删除断点4、使能&#xff08;禁用/开启&#…...

advanced-css: No.1

本套教程学习来自视频&#xff1a;https://www.bilibili.com/video/BV1n94y1o7yS/?p7&spm_id_frompageDriver&vd_sourceb79be8283df9418cb45941cc0bd583c6 案例 实现效果图 代码 HTML: <!DOCTYPE html> <html lang"en"><head><meta c…...

最新宝塔面板第三方云端站点程序源码/第三方宝塔面板PHP源码/全开源ThinkPHP框架

源码简介&#xff1a; 实现宝塔面板第三方云端站点程序源码,这个是第三方宝塔面板 btcloud PHP源码&#xff0c;它还有云端使用记录、IP黑白名单、定时任务等功能。 这是一个使用PHP开发的宝塔面板第三方云端站点程序。 您可以利用此程序搭建属于自己的宝塔面板第三方云端&a…...

【Unity之UI编程】玩法面板的实现

&#x1f468;‍&#x1f4bb;个人主页&#xff1a;元宇宙-秩沅 &#x1f468;‍&#x1f4bb; hallo 欢迎 点赞&#x1f44d; 收藏⭐ 留言&#x1f4dd; 加关注✅! &#x1f468;‍&#x1f4bb; 本文由 秩沅 原创 &#x1f468;‍&#x1f4bb; 收录于专栏&#xff1a;UI_…...

栈和队列:栈

栈的概念&#xff1a; 栈&#xff1a; 一种特殊的线性表&#xff0c;其只允许在固定的一端进行插入和删除元素操作。进行数据插入和删除操作的一端 称为栈顶&#xff0c;另一端称为栈底。 栈中的数据元素遵守后进先出LIFO&#xff08;Last In First Out&#xff09;的原则。…...

由浅入深学习统计学 - 常用统计图形学习

学习笔记 第一章- 信息图形化 图形化&#xff08;可视化&#xff09; 在一堆数据中&#xff0c;自己发现了这些数据的规律&#xff0c;但是无法表述给其他人知道&#xff0c;图形化就是便于他人理解数据的规律的展示的手段。 或者说我们也可以从统计的数据图形中发现某些没有…...

【java进阶】集合的三种遍历(迭代器、增强for、Lambda)

目录 一、先谈集合&#xff1a; 二、单列集合的三种遍历方式 迭代器遍历 增强for遍历 Lambda表达式遍历 一、先谈集合&#xff1a; &#x1f525;那我们平常用for循环依赖下标遍历不行嘛&#xff0c;这就与集合的分类有关了。 集合的体系结构&#xff1a; collection是单…...

Qt实现动态桌面小精灵(含源码)

目录 一、设计思路 二、部分源码演示 三、源码地址 🌈write in front🌈 🧸大家好,我是三雷科技.希望你看完之后,能对你有所帮助,不足请指正!共同学习交流. 🆔本文由三雷科技原创 CSDN首发🐒 如需转载还请通知⚠️ 📝个人主页:三雷科技🧸—CSDN博客 🎁欢…...

Qt 自定义分页控件

目录 前言1、功能描述2、代码实现2.1 ui文件2.1 头文件2.2 源码文件2.3 设计思路 4、示例5、总结 前言 在应用程序开发时经常会遇到数据分页的需求&#xff0c;每一页展示特定数量的数据&#xff0c;通过点击按钮翻页或者输入页码跳转到指定页。 本文介绍一个自定义分页控件&a…...

Java中的7大设计原则

在面向对象的设计过程中&#xff0c;首先需要考虑的是如何同时提高一个软件系统的可维护性和可复用性。这时&#xff0c;遵从面向对象的设计原则&#xff0c;可以在进行设计方案时减少错误设计的产生&#xff0c;从不同的角度提升一个软件结构的设计水平。 1、单一职责 一个类…...

【生产环境亲测】HANA2.0高可用切换实战指南

SLES 15 SP3 + HANA 2.0 SPS06 生产级 HA 手工切换全流程 | 维护模式规范 | 零数据丢失 | Pacemaker 集群运维 文章标签 SAP HANA SLES 15 SP3 高可用切换 Pacemaker SAP Basis 运维实战 数据库维护 一、前言 在 SLES 15 SP3 + SAP HANA 2.0 SPS06 + Pacemaker/Corosync 高可…...

AI原生研发转型落地难?(SITS2026闭门报告首次解密:92%企业卡在“伪敏捷+真人工”陷阱)

第一章&#xff1a;AI原生研发的文化变革&#xff1a;从认知断层到组织跃迁 2026奇点智能技术大会(https://ml-summit.org) 当大模型不再仅是“调用API的工具”&#xff0c;而成为代码生成、测试覆盖、架构推演与运维决策的默认协作者&#xff0c;研发团队的认知基线正经历一…...

Vivado2020.2与Modelsim2020.4联合仿真实战:从安装到避坑指南

1. 环境准备与安装避坑指南 刚接触FPGA开发的朋友们&#xff0c;肯定对Vivado和Modelsim这对黄金搭档不陌生。但说实话&#xff0c;我第一次用Vivado2020.2和Modelsim2020.4做联合仿真时&#xff0c;差点被各种坑给劝退。今天我就把踩过的坑和解决方案都整理出来&#xff0c;让…...

终极卡牌批量生成工具:让桌游设计效率提升300%的完整指南

终极卡牌批量生成工具&#xff1a;让桌游设计效率提升300%的完整指南 【免费下载链接】CardEditor 一款专为桌游设计师开发的批处理数值填入卡牌生成器/A card batch generator specially developed for board game designers 项目地址: https://gitcode.com/gh_mirrors/ca/C…...

Unity UI圆角效果实战:从Shader原理到高级应用完整指南

Unity UI圆角效果实战&#xff1a;从Shader原理到高级应用完整指南 【免费下载链接】Unity-UI-Rounded-Corners These components and shaders allow you to add rounded corners to UI elements! 项目地址: https://gitcode.com/gh_mirrors/un/Unity-UI-Rounded-Corners …...

higress 这个中登才是AI时代的心头好众

核心摘要&#xff1a;这篇文章能帮你 ?? 1. 彻底搞懂条件分支与循环的适用场景&#xff0c;告别选择困难。 ?? 2. 掌握遍历DOM集合修改属性的标准姿势与性能窍门。 ?? 3. 识别流程控制中的常见“坑”&#xff0c;并学会如何优雅地绕过去。 ?? 主要内容脉络 ?? 一、痛…...

JS——动态判断节假日(支持自定义节假日与调休规则)

1. 为什么需要动态判断节假日&#xff1f; 在日常开发中&#xff0c;我们经常会遇到需要判断某一天是否是节假日的场景。比如电商平台的促销活动页面需要显示"节假日不发货"的提示&#xff0c;或者企业考勤系统需要自动计算员工的休假天数。传统的做法是硬编码节假日…...

MPL3115A2传感器驱动开发与嵌入式高度气压测量实战

1. MPL3115A2 压力/高度/温度传感器深度技术解析 MPL3115A2 是 NXP&#xff08;现为恩智浦半导体&#xff09;推出的一款高精度、低功耗、IC 接口的绝对压力传感器&#xff0c;集成温度测量与气压高度计算引擎。该器件并非简单的模拟信号采集芯片&#xff0c;而是一个具备完整数…...

K8S集群节点NotReady?别急着重启,先检查swap分区这个隐藏开关(附永久关闭swap方法)

K8S集群节点NotReady&#xff1f;别急着重启&#xff0c;先检查swap分区这个隐藏开关 凌晨三点&#xff0c;手机突然响起刺耳的告警声——K8S集群中三个工作节点同时显示NotReady状态。作为运维工程师&#xff0c;你的第一反应可能是立即重启节点或服务。但请先停下即将敲下reb…...

快速解密Wii U NUS文件:CDecrypt工具的终极解决方案

快速解密Wii U NUS文件&#xff1a;CDecrypt工具的终极解决方案 【免费下载链接】cdecrypt Decrypt Wii U NUS content — Forked from: https://code.google.com/archive/p/cdecrypt/ 项目地址: https://gitcode.com/gh_mirrors/cd/cdecrypt 对于Wii U游戏开发者和模组…...