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

2023-10-30

题目:

给定一个整数数组,其中第 i 个元素代表了第 i 天的股票价格 。​

设计一个算法计算出最大利润。在满足以下约束条件下,你可以尽可能地完成更多的交易(多次买卖一支股票):

你不能同时参与多笔交易(你必须在再次购买前出售掉之前的股票)。
卖出股票后,你无法在第二天买入股票 (即冷冻期为 1 天)。
示例:

输入: [1,2,3,0,2]
输出: 3
解释: 对应的交易状态为: [买入, 卖出, 冷冻期, 买入, 卖出]

来源:力扣(LeetCode)
链接

思路:

动态规划:将每天的操作分为3种情况,建立状态转移方程,每天的状态分为3种情况(最后一天只有两种情况:休息或者卖出).

状态

  • hold:持有股票
  • sold:卖出股票
  • rest:休息

操作

  • sell:卖出
  • buy:买入
  • do nothing:啥也不做

建立状态转移图:

状态转移图

符号约定:

price[i] 为第i 天股票价格;
hold[i] 为第 i 天选择hold操作;
sold[i] 为第 i 天选择sold操作;
rest[i] 为第 i 天选择rest操作;


建立状态转移方程:

当日状态 昨日状态(取最大值)
hold [i] max( hold[i-1], rest[i-1] - price[i])
sold [i] hold[i-1] + price[i]
rest[i] max(rest[i-1], sold[i-1]

java代码

int hold = Integer.MIN_VALUE; //确保第一天买入一定是从休息转移过来
int sold = 0;
int rest = 0; 

for(int i = 0; i< prices.length ; i++){
    int preHold = hold; 
    hold = Math.max(rest - prices[i], hold);//1.继续买入 2.休息
    rest = Math.max(rest, sold);//1.继续休息 2.卖完股票休息
    sold = preHold + prices[i]; //1.卖出股票
}

//最后一天只有两种选择
return Math.max(rest, sold);//1.休息 2.卖完股票休息

参考文章

最佳买卖股票时机含冷冻期 - 击败 100%

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

最佳买卖股票时机含冷冻期 的相关文章

  • Tomcat 调优之从 Linux 内核源码层面看 Tcp backlog

    优质资源分享 学习路线指引 点击解锁 知识定位 人群定位 Python实战微信订餐小程序 进阶级 本课程是python flask 微信小程序的完美结合 从项目搭建到腾讯云部署上线 打造一个全栈订餐系统 Python量化交易实战 入门级 手
  • 【deepspeed】【训练】【交互】【wandb】训练过程中的wandb交互如何去除

    问题 gpt模型训练时 中间有询问输入账户 交互式的询问影响自动执行脚本 询问是这样的 解决办法 在脚本中设置环境变量 关闭wandb 如下图 其他 log中没有显示脚本的完整路径 顺着log中前面的脚本路径 找到了这个脚本 是和框架的其他
  • 28句话,句句触动你的心

    author skate time 2010 06 01 1 莎士比亚说 再好的东西都有失去的一天 再深的记忆也有淡忘的一天 再爱的人 也有远走的一天 再美的梦也有苏醒的一天 该放弃的决不挽留 该珍惜的决不放手 分手后不可以做朋友 因为彼此
  • 3.5 ICMP不可达报文的处理

    在三次握手阶段有两种情况TCP会收到ICMP 目的不可达 报文 1 client端通过connect系统调用发送SYN请求到server端后 server没有进程在相应的地址或端口处理请求 这时client端会收到ICMP不可达报文 2 c
  • Correct single, compatible version of XXX

    maven包冲突问题 问题分析 解决方法 问题分析 1 Failed to start component StandardEngine Catalina StandardHost localhost 2 Correct single co
  • 【浅析python 中__name__ = ‘__main__‘ 的作用】

    很多新手刚开始学习python的时候经常会看到python 中 name main 这样的代码 可能很多新手一开始学习的时候都比较疑惑 python 中 name main 的作用 到底干嘛的 有句话经典的概括了这段代码的意义 Make a
  • 智能学习

    智能学习 MATLAB实现TLBO教学学习优化算法的图像特征提取 目录 智能学习 MATLAB实现TLBO教学学习优化算法的图像特征提取 基本介绍 模型描述 程序设计 参考资料 基本介绍 MATLAB实现TLBO教学学习优化算法的图像特征提
  • python语法-MySQL(DDL数据定义)

    python语法 MySQL数据库 sql语言的分类 DDL数据定义 DML数据操作 DCL数据控制 DQL数据查询 SQL的语法特征 1 sql语言大小写不敏感 2 sql可以单行或者多行书写 最后以 号结束 3 sql支持注释 单行注释
  • 找不到mybatis的mybatis-config.xml配置文件

    初学mybatis出现过好几次找不到配置文件的问题 今天练习一个小项目又出现这个问题 排查了之前出现的错误 都没有解决问题 后来发现是自己粗心大意 把从mybatis官网中复制的调用生成mysqlsessionFactory的代码直接复制过
  • 【Ei检索】2022年计算语言学和自然语言处理国际会议(CLNLP 2022)

    2022年计算语言学和自然语言处理国际会议 CLNLP 2022 重要信息 会议网址 www clnlp org 会议时间 2022年12月16 18日 召开地点 中国北京 截稿时间 2022年10月31日 录用通知 投稿后2周内 收录检索
  • GridView编辑删除操作

    第一种 使用DataSource数据源中自带的编辑删除方法 这种不常用 在这里就不加说明了 第二种 使用GridView的三种事件 GridView1 RowEditing 编辑 GridView1 RowUpdating 更新 GridV
  • 胡小明:城市大脑与人脑不同的数据意识

    一 数据应用要区别对待 1 2 数据应用比数据收集重要 大数据热正在席卷全国 许多地方政府都成立大数据局 统管政府的数据资源并将数据收集摆在第一位 数据应用研究却迟迟跟不上 投资不断增长应用效益却无相应增长 大数据收集已经得不偿失 应用效益
  • 【STM32】IAP

    首先先明白几个概念 IAP In applicating Programing 在应用编程 ICP In Circuit Programming 在线编程 我自己理解的话 ICP就是平时用仿真器直接下载程序的方式 应用程序直接从FLASH的
  • wireshark过滤规则

    wireshark是一款抓包软件 常用来分析网络底层协议 寻找网络安全问题 平时用的最多的是过滤功能 wireshark的过滤分功能有两种 抓包过滤器和显示过滤器 抓包过滤器的过滤规则分为四个部分 放行 类型 协议和逻辑运算符 方向 src
  • Jmeter性能测试面试基础问答

    性能测试基础 简述实施软件性能测试的流程 a 性能需求分析 挑选用户使用最频繁的功能来做测试 比如 登陆 搜索 提交订单 确定性能指标 比如 事务通过率为100 90 的事务响应时间不超过5秒 并发用户为1000人时CPU和内存的使用率在7
  • 自动化测试很难吗?是的,难。?

    其实现在软件测试有一个特别奇怪的现象 那就是每个人在一起进入这个圈子的时候 他想的就是我要自动化测试 我要学会自动化 自动化会替换手工测试 很多这种心声 我在这给大家来分析一下 首先为什么很多人在入这个圈的时候 会听到 这种声音 比如 学好
  • C语言例题讲解(if语句,循环语句,函数)

    目录 if语句例题 题目分析 代码 题目总结 循环语句例题 题目分析 代码 题目总结 函数例题 题目分析 代码 题目总结 if语句例题 计算1 1 1 2 1 3 1 4 1 5 1 99 1 100 的值 打印出结果 题目分析 1 首先我
  • LinkList集合详解

    LinkList集合详解 1 LinkedList简介 LinkedList类是一个继承于AbstractSequentialList的双向循环链表 它是非同步的 也是非线程安全的 LinkedList实现了List接口 能对它进行队列操作
  • 在elementUI中sort-orders排序,默认为三种,怎么改成两种

    在 table表单中添加sort change事件 sort orders ascending descending
  • 解决:同样的Python程序,在cmd和pycharm都能正常运行,但是在Visual Studio Code却报错,且`conda activate`命令无法激活或切换虚拟环境

    解决 同样的Python程序 在cmd和pycharm都能正常运行 但是在Visual Studio Code却报错 且 conda activate 命令无法激活或切换虚拟环境 1 软件环境 2 问题描述 3 解决方法 4 结果预览 1

随机推荐

  • Linux 文本处理工具 - sed(用于过滤和转换文本)

    Linux 文本处理工具 sed 用于过滤和转换文本 文章目录 Linux 文本处理工具 sed 用于过滤和转换文本 一 简介 二 常用参数 三 动作说明 四 实例 p 显示 d 删除 a 添加 c 替换 w 把符合的行写到指定文件中 i
  • Code-server 云服务器配置docker 运行

    Code server 云服务器配置docker 运行 1 docker安装 安装需要的软件包 yum utils device mapper persistent data lvm2 yum install y yum utils dev
  • android httpClient 支持HTTPS的2种处理方式

    问题 项目中Android https或http请求地址重定向为HTTPS的地址 相信很多人都遇到了这个异常 无终端认证 javax net ssl SSLPeerUnverifiedException No peer certificat
  • Redis学习笔记

    目录 一 redis前言 1 1 Redis简介 1 2 主要特点 1 3redis 的windows安装后 1 4 修改Redis配置文件 二 redis常用数据类型 三 redis常用命令 1 字符串操作命令 2 哈希操作命令 3 列表
  • python爬虫,wallhaven热门壁纸多线程采集下载源码

    新年新气象 祝大家牛转乾坤 牛气冲天 过年期间收到了很多朋友的新年祝福 没有一一回应 见谅 很久没写爬虫了 手生了 在吾爱找了一个练手网站 国外的壁纸网站 wallhaven 这里采集下载热门图片为例 重温一下python图片爬虫 感兴趣的
  • Veeam 备份还原操作手册

    目录 一 安装Bakup Replication 1 1 选择 Backup Replication 1 2 选择Install安装 二 添加VC主机 2 1 VMWARE VSPHERE 添加 2 2 VC主机名 2 3 用户认证 三 配
  • Linux I/O多路复用——epoll模型实现服务端Socket通信

    目录 epoll模型 epoll函数 epoll create epoll ctl epoll wait 程序流程 水平触发 LT 边沿触发 ET select poll epoll对比 为什么ET模式下 需要将套接字设置为非阻塞式 epo
  • C语言_指针

    C语言指针 指针 这个要从直接访问与间接访问说起 在程序中一般通过变量名来引用变量的值 程序通过编译后就会把变量名转化为变量的地址 通过地址对数据进行存取操作 这种方式称为直接访问 而间接访问是将变量i的地址存放在另一变量中 然后通过该变量
  • 手写Spring框架(四)

    逻辑梳理 这部分完成AOP部分 先梳理AOP的步骤 getBean 方法作为入口 而后是几个关键的类 Context在前文都有提到 现在解释一下其他的类 AdviseSupport 通知的工具类 完成配置文件的解析 将Advise和目标类的
  • Spring bean的生命周期

    学习spring源码主框架 从源码角度开发学习Spring bean的生命周期 spring创建bean方法org springframework beans factory support AbstractBeanFactory getB
  • 程序员成长为架构师必备的十项技能

    一 卓越的程序员 1 每个好架构师都是一位出色的程序员 架构师 听起来是如此神秘的一个称号 尤其是在开发领域刚入门不久的菜鸟级程序员眼中 架构师都是高手 都是牛人 都是如此高高在上的存在 不过 在搞了四 五年编程之后 程序员们往往早已失去了
  • 【IT之路】LoadRunner系列-Win7 64bit下搭建Loadrunner11破解版

    一直想提升下性能测试知识 但是都因为这样那样的原因 没有实际上系统梳理下 在此 刚好空出时间来了 一步步把性能测试知识重新拾一下 本文介绍的是在vmware的环境下进行的Loadrunner环境搭建 一 环境准备 Win7 64bit Lo
  • 云计算基础知识:

    云计算 cloud computing 是分布式计算的一种 指的是通过网络 云 将巨大的数据计算处理程序分解成无数个小程序 然后 通过多部服务器组成的系统进行处理和分析这些小程序得到结果并返回给用户 云计算早期 简单地说 就是简单的分布式计
  • 数据结构(一)数组

    概述 说起数组我们都不陌生 几乎在每一种编程语言中 基本上都会有数组这种数据类型 不仅如此它还是是最基础最简单的数据结构 尽管如此 可能还是有一些人并没有真正的理解这个基础数据结构的精髓所在 首先 我们都知道 在java中数组是从 0 开始
  • Linux-epoll机制

    主要接口 epoll create epoll ctl epoll wait epoll create 头文件 include
  • Windows核心编程:字符和字符串处理

    Windows核心编程 字符和字符串处理 1 字符编码 ANSI 字符 一个字符一字节 8位 最多只能表达256个字符 UTF 的全称是Unicode Transformation Format Unicode转换格式 UTF 16 将 每
  • Transformer哲学

    一切苦痛 皆为过往 当我们科研遇到困难时 请大胆寻求Transformer的帮助吧 Transformer用一种苍老的声音问询 你有什么 你要什么 你怎么给我这些东西 一个翻译任务 我有英文 我需要中文 我以embedding形式给 一个目
  • Spring的@Component 、@Value 和 Springboot 的 @Component 、@ConfigurationProperties 使用

    application yml配置 book name 一个人的朝圣 author 蕾秋 乔伊斯 age 35 Spring的 Value 程序代码里 Spring主要在 Value注解的参数中使用EL表达式 注入普通字符串 注入操作系统属
  • C++异常处理机制的详细介绍

    1 C 异常处理的套路 1 1 C 异常处理机制之抛出异常关键字 throw 1 2throw关键字的使用 在哪可能出现异常就在哪里使用throw关键字抛出异常 这个异常可以使用一个常量 字符串 或类对象 都可以来抛出 throw 常量 字
  • 最佳买卖股票时机含冷冻期

    题目 给定一个整数数组 其中第 i 个元素代表了第 i 天的股票价格 设计一个算法计算出最大利润 在满足以下约束条件下 你可以尽可能地完成更多的交易 多次买卖一支股票 你不能同时参与多笔交易 你必须在再次购买前出售掉之前的股票 卖出股票后