Leetcode 股票买卖
买卖股票最佳时机
I
II 不限制交易次数
prices = [7,1,5,3,6,4]
启发思路:最后一天发生了什么?
从第0天到第5天结束时的利润 = 从第0天到第4天结束时的利润 + 第5天的利润
(第5天的利润:0/-4/4)
关键词:天数 / 是否持有股票
分解子问题:到第i天结束,持有/未持有股票的最大利润
下一子问题:到第i-1天结束时,持有/未持有股票的最大利润
状态转移图
定义dfs(i, 0)表示到第i天结束,未持有股票的最大利润
定义dfs(i, 1)表示到第i天结束,持有股票的最大利润
由于第i-1天的结束就是第i天的开始,dfs(i-1, .)也表示到第i天开始时的最大利润
状态转移图中:
卖出:dfs(i, 0) = dfs(i - 1, 1) + prices[i]
买入:dfs(i, 1) = dfs(i - 1, 0) - prices[i]
未持有状态下无动作:dfs(i, 0) = dfs(i - 1, 0)
持有状态下无动作:dfs(i, 1) = dfs(i - 1, 1)
汇总公式:
dfs(i, 0) = max(dfs(i - 1, 0), dfs(i - 1, 1) + prices[i])
dfs(i, 1) = max(dfs(i - 1, 1), dfs(i - 1, 0) - prices[i])
递归边界:
dfs(-1, 0) = 0 // 第0天开始未持有股票,利润为0
dfs(-1, 1) = INT_MIN // 第0天开始不可能持有股票
递归入口:
max(dfs(n - 1, 0), dfs(n - 1, 1)) = dfs(n - 1, 0)
思路:
class Solution {
public:// 优化方向:改为cacheint dfs(int i, bool hold, const std::vector<int> &prices) {// 边界if (i < 0) {return hold ? INT_MIN : 0;}if (hold) {return max(dfs(i - 1, true, prices), dfs(i - 1, false, prices) - prices[i]);}return max(dfs(i - 1, false, prices), dfs(i - 1, true, prices) + prices[i]);}int maxProfit(std::vector<int> prices) {int n = prices.size();return dfs(n - 1, false, prices);}
};
实际代码
class Solution {
public:int maxProfit(std::vector<int> prices) {int n = prices.size();vector<std::pair<int, int>> res(n + 1);res[0].second = INT_MIN;for (auto i = 0; i < n; ++i) {res[i + 1].first = max(res[i].first, res[i].second + prices[i]);res[i + 1].second = max(res[i].second, res[i].first - prices[i]);}return res[n].first;}
};// 演进
class Solution {
public:int maxProfit(std::vector<int> prices) {int n = prices.size();int f0{};int f1{INT_MIN};for (auto i = 0; i < n; ++i) {int new_f0 = max(f0, f1 + prices[i]);f1 = max(f1, f0 - prices[i]);f0 = new_f0;}return f0;}
};
III 冷冻期 309
class Solution {
public:int maxProfit(std::vector<int> prices) {int n = prices.size();int f0{-prices.front()};int f1{};int f2{};for (auto i = 1; i < n; ++i) {int new_f0 = max(f0, f2 - prices[i]);int new_f1 = f0 + prices[i];int new_f2 = max(f1, f2);f0 = new_f0;f1 = new_f1;f2 = new_f2;}return max(f1, f2);}
};
IV 最多K次 188
相关文章:
Leetcode 股票买卖
买卖股票最佳时机 I II 不限制交易次数 prices [7,1,5,3,6,4] 启发思路:最后一天发生了什么? 从第0天到第5天结束时的利润 从第0天到第4天结束时的利润 第5天的利润 (第5天的利润:0/-4/4) 关键词:天…...
小白学习手册:轻松理解MQ消息队列
目录 # 开篇 RabbitMQ介绍 通讯概念 1. 初始MQ及类型 2. MQ的架构 2.1 RabbitMQ的结构和概念 2.2 RabbitMQ消息流示意图 3. MQ下载使用 3.1 Docker下载MQ参考 3.2 进入RabbitMQ # 开篇 MessagesQueue 是一个抽象概念,用于描述消息队列系统的一般特性和功能…...
electron线上更新
一、安装electron-updater npm install --save electron-updater二、在main.js中引入使用 import { autoUpdater } from electron; if (!isDev) {const serverUrl https://your-update-server.com; // 自定义更新服务器地址或GitHub Releases地址autoUpdater.setFeedURL(${…...
谈谈检测浏览器类型
前几天被问到如何检测浏览器类型,我突然发现我对此并不了解,之前的项目中也没有使用到过,只隐约记得通过一个自带的方法即可获取。所以今天特意来仔细补习一下。 核心:navigator.userAgent 1.正则表达式 2.引用外部库 3.判断浏…...
Django 和 Django REST framework 创建对外 API
1. 环境准备 确保你已经安装了 Python 和 Django。如果尚未安装 Django REST framework,通过 pip 安装它: pip install djangorestframework 2. 创建 Django 项目 如果你还没有 Django 项目,可以通过以下命令创建: django-ad…...
数据结构之“刷链表题”
🌹个人主页🌹:喜欢草莓熊的bear 🌹专栏🌹:数据结构 目录 前言 一、相交链表 题目链接 大致思路 代码实现 二、环形链表1 题目链接 大致思路 代码实现 三、环形链表2 题目链接 大致思路 代码实…...
复分析——第9章——椭圆函数导论(E.M. Stein R. Shakarchi)
第 9 章 椭圆函数导论 (An Introduction to Elliptic Functions) The form that Jacobi had given to the theory of elliptic functions was far from perfection; its flaws are obvious. At the base we find three fundamental functions sn, cn and dn. These functio…...
使用kubeadm安装k8s并部署应用
安装k8s 1. 准备机器 准备三台机器 192.168.136.104 master节点 192.168.136.105 worker节点 192.168.136.106 worker节点2. 安装前配置 1.基础环境 ######################################################################### #关闭防火墙: 如果是云服务器&…...
springMVC学习
概述 Spring MVC(Model-View-Controller,模型-视图-控制器)是Spring框架的一部分,用于构建基于Java的Web应用程序。它遵循MVC设计模式,分离了应用程序的不同方面(输入逻辑、业务逻辑和UI逻辑)&…...
深入探讨光刻技术:半导体制造的关键工艺
前言 光刻(Photolithography)是现代半导体制造过程中不可或缺的一环,它的精度和能力直接决定了芯片的性能和密度。本文将详细介绍光刻技术的基本原理、过程、关键技术及其在半导体制造中的重要性。 光刻技术的基本原理 光刻是一种利用光化…...
CesiumJS【Basic】- #042 绘制纹理线(Primitive方式)
文章目录 绘制纹理线(Primitive方式)1 目标2 代码2.1 main.ts3 资源文件绘制纹理线(Primitive方式) 1 目标 使用Primitive方式绘制纹理线 2 代码 2.1 main.ts var start = Cesium.Cartesian3.fromDegrees(-75.59777, 40.03883);var...
代码随想录第38天|动态规划
1049. 最后一块石头的重量 II 参考 备注: 当物体容量也等同于价值时, 01背包问题的含义则是利用好最大的背包容量sum/2, 使得结果尽可能的接近或者小于 sum/2 等价: 尽可能的平分成相同的两堆, 其差则为结果, 比如 (abc)-d, (ac)-(bd) , 最终的结果是一堆减去另外一堆的和, 问…...
java生成excel,uniapp微信小程序接收excel并打开
java引包,引的是apache.poi <dependency><groupId>org.apache.poi</groupId><artifactId>poi-ooxml</artifactId><version>5.2.3</version></dependency> 写一个测试类,把excel输出到指定路径 public s…...
sam_out 目标检测的应用
缺点参考地址训练验证模型解析 缺点 词表太大量化才可 参考地址 https://aistudio.baidu.com/projectdetail/8103098 训练验证 import os from glob import glob import cv2 import paddle import faiss from out_yolo_model import GPT as GPT13 import pandas as pd imp…...
VLAN原理与配置
AUTHOR :闫小雨 DATE:2024-04-28 目录 VLAN的三种端口类型 VLAN原理 什么是VLAN 为什么使用VLAN VLAN的基本原理 VLAN标签 VLAN标签各字段含义如下: VLAN的划分方式 VLAN的划分包括如下5种方法: VLAN的接口链路类型 创建V…...
使用Spring Boot实现RESTful API
使用Spring Boot实现RESTful API 大家好,我是免费搭建查券返利机器人省钱赚佣金就用微赚淘客系统3.0的小编,也是冬天不穿秋裤,天冷也要风度的程序猿!今天我们将深入探讨如何利用Spring Boot框架实现RESTful API,这是现…...
中英双语介绍美国常春藤联盟( Ivy League):八所高校
中文版 常春藤联盟简介 常春藤联盟(Ivy League)是美国东北部八所私立大学组成的高校联盟。虽然最初是因体育联盟而得名,但这些学校以其学术卓越、历史悠久、校友杰出而闻名于世。以下是对常春藤联盟的详细介绍,包括其由来、成员…...
【计算机网络】常见的网络通信协议
目录 1. TCP/IP协议 2. HTTP协议 3. FTP协议 4. SMTP协议 5. POP3协议 6. IMAP协议 7. DNS协议 8. DHCP协议 9. SSH协议 10. SSL/TLS协议 11. SNMP协议 12. NTP协议 13. VoIP协议 14. WebSocket协议 15. BGP协议 16. OSPF协议 17. RIP协议 18. ICMP协议 1…...
java实现http/https请求
在Java中,有多种方式可以实现HTTP或HTTPS请求。以下是使用第三方库Apache HttpClient来实现HTTP/HTTPS请求的工具类。 优势和特点 URIBuilder的优势在于它提供了一种简单而灵活的方式来构造URI,帮助开发人员避免手动拼接URI字符串,并处理参…...
NC204871 求和
链接 思路: 对于一个子树来说,子树的节点就包括在整颗树的dfs序中子树根节点出现的前后之间,所以我们先进行一次dfs,用b数组的0表示区间左端点,1表示区间右端点,同时用a数组来标记dfs序中的值。处理完dfs序…...
轻量级PDF阅读器SumatraPDF核心功能与效率提升指南
轻量级PDF阅读器SumatraPDF核心功能与效率提升指南 【免费下载链接】sumatrapdf SumatraPDF reader 项目地址: https://gitcode.com/gh_mirrors/su/sumatrapdf 在数字文档处理领域,速度与资源占用往往难以平衡。SumatraPDF以其独特的轻量级设计,重…...
告别繁琐流程:用快马AI生成脚本实现龙虾部署效率飞跃
最近在团队里负责微服务部署时,发现每次更新代码都要重复执行十几个步骤:拉代码、装依赖、打镜像、推仓库、重启容器...一套流程下来至少半小时,还容易手滑出错。于是研究了一套自动化方案,用Python脚本把整个流程串了起来&#x…...
超越节点分类:Graph Transformer在脑网络分析中还能做什么?从疾病识别到生物标记发现
超越节点分类:Graph Transformer如何解锁脑网络分析的临床价值 当大多数关于图神经网络(GNN)在医疗领域应用的讨论还停留在疾病分类准确率时,前沿研究已经开始探索更深层次的问题:这些模型能否帮助我们理解疾病背后的生…...
高效解决E-Hentai图库下载难题:实用下载工具全攻略
高效解决E-Hentai图库下载难题:实用下载工具全攻略 【免费下载链接】E-Hentai-Downloader Download E-Hentai archive as zip file 项目地址: https://gitcode.com/gh_mirrors/eh/E-Hentai-Downloader 在数字资源管理领域,E-Hentai作为知名的漫画…...
前端新手入门:借助快马仿写腾讯qclaw官网掌握基础布局
作为一个刚接触前端开发的新手,我最近尝试通过模仿企业官网来学习HTML和CSS。腾讯qclaw官网结构清晰、设计规范,非常适合作为入门练习的样板。在这个过程中,我发现InsCode(快马)平台的实时预览功能特别有帮助,让我能即时看到代码修…...
别再买错千元投影! 哈趣Q1Pro藏看越级体验
当下的智能投影市场正经历着深度的“去伪存真”变革,行业洗牌加速的同时,也让消费者的选购变得愈发谨慎。洛图科技数据显示,2025年国内智能投影市场整体销量下滑,其中低端投影成为调整重灾区,0-499元价位段销量同比大跌…...
NVMe 2.0 Boot Partitions:解锁高效固件更新的双分区机制
1. 为什么我们需要NVMe 2.0的双启动分区? 想象一下你正在给手机升级系统,突然断电了——传统单分区方案会让设备直接变砖,而NVMe 2.0的双启动分区就像给系统上了双保险。这个设计最初是为了解决企业级SSD在724小时运行时的固件更新难题&#…...
4步完成Axure本地化设置:让新手轻松上手的中文界面方案
4步完成Axure本地化设置:让新手轻松上手的中文界面方案 【免费下载链接】axure-cn Chinese language file for Axure RP. Axure RP 简体中文语言包,不定期更新。支持 Axure 9、Axure 10。 项目地址: https://gitcode.com/gh_mirrors/ax/axure-cn …...
突破网盘下载限制:直链工具全攻略
突破网盘下载限制:直链工具全攻略 【免费下载链接】Online-disk-direct-link-download-assistant 一个基于 JavaScript 的网盘文件下载地址获取工具。基于【网盘直链下载助手】修改 ,支持 百度网盘 / 阿里云盘 / 中国移动云盘 / 天翼云盘 / 迅雷云盘 / 夸…...
USB设备映射混乱?三招教你通过终端识别/dev/ttyUSB*对应的物理插槽
USB设备映射混乱?三招教你通过终端识别/dev/ttyUSB*对应的物理插槽 当你的工作台上同时连接着五个相同型号的温湿度传感器,系统却将它们随机分配为/dev/ttyUSB0到4时,那种抓狂的感觉每个物联网开发者都深有体会。上周调试智能农业大棚时&…...
