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

news2024/9/20 18:48:38

阅读目录

    • 1. 题目
    • 2.解题思路
    • 3. 代码实现

1. 题目

2.解题思路

根据题意,每一天有这样几个状态:买入股票、卖出股票、冷冻期、持有股票,因此,我们假设 f 为每天这几个状态下对应的最大收益,由于持有股票时不知道是哪天买入的,所以我们还需要知道当天状态是持有股票时的买入股票价格。因此有:

f [ 0 ] = 当天买入股票后的最大收益 f [ 1 ] = 当天卖出股票后的最大收益 f [ 2 ] = 当天是冷冻期的最大收益 f [ 3 ] = 当天继续持有股票的最大收益 f [ 4 ] = 当天持有股票的买入价格 f[0] = 当天买入股票后的最大收益 \\ f[1] = 当天卖出股票后的最大收益 \\ f[2] = 当天是冷冻期的最大收益 \\ f[3] = 当天继续持有股票的最大收益 \\ f[4] = 当天持有股票的买入价格 \\ f[0]=当天买入股票后的最大收益f[1]=当天卖出股票后的最大收益f[2]=当天是冷冻期的最大收益f[3]=当天继续持有股票的最大收益f[4]=当天持有股票的买入价格

状态转移时,

i − 1 i-1 i1 天是冷冻期,第 i i i 天才可以买入,所以有 f [ i ] [ 0 ] = f [ i − 1 ] [ 2 ] f[i][0]=f[i-1][2] f[i][0]=f[i1][2]

i − 1 i-1 i1 天是买入股票或者持有股票,第 i i i 天才可以卖出,状态是二者的较大值,所以有 f [ i ] [ 1 ] = m a x ( f [ i − 1 ] [ 0 ] + p r i c e s [ i ] − p r i c e s [ i − 1 ] , f [ i − 1 ] [ 3 ] + p r i c e s [ i ] − f [ i − 1 ] [ 4 ] ) f[i][1]=max(f[i-1][0] + prices[i] - prices[i-1], f[i-1][3] + prices[i] - f[i-1][4]) f[i][1]=max(f[i1][0]+prices[i]prices[i1],f[i1][3]+prices[i]f[i1][4])

i − 1 i-1 i1 天是卖出或者冷冻期,第 i i i 天才可以是冷冻期,所以有 f [ i ] [ 2 ] = m a x ( f [ i − 1 ] [ 2 ] , f [ i − 1 ] [ 1 ] ) f[i][2]=max(f[i-1][2], f[i-1][1]) f[i][2]=max(f[i1][2],f[i1][1])

i − 1 i-1 i1 天是买入或者持有,第 i i i 天才可以是持有,这时候,我们需要比较是买入-持有获得的价值大还是持有-持有获得的价值大,前者的价值是 f [ i − 1 ] [ 0 ] − p r i c e s [ i − 1 ] f[i-1][0] - prices[i-1] f[i1][0]prices[i1],后者的价值是 f [ i − 1 ] [ 3 ] − f [ i − 1 ] [ 4 ] f[i-1][3] - f[i-1][4] f[i1][3]f[i1][4]。如果前者的价值大,则更新 f [ i ] [ 3 ] = f [ i − 1 ] [ 0 ] , f [ i ] [ 4 ] = p r i c e s [ i − 1 ] f[i][3]=f[i-1][0],f[i][4]=prices[i-1] f[i][3]=f[i1][0]f[i][4]=prices[i1],如果后者的价值大,则更新 f [ i ] [ 3 ] = f [ i − 1 ] [ 3 ] , f [ i ] [ 4 ] = f [ i − 1 ] [ 4 ] f[i][3]=f[i-1][3],f[i][4]=f[i-1][4] f[i][3]=f[i1][3]f[i][4]=f[i1][4]

3. 代码实现

class Solution:
    def maxProfit(self, prices: List[int]) -> int:

        if len(prices) == 1:
            return 0
        ret = 0
        # dp[0] 代表当天买入股票后的最大收益
        # dp[1] 代表当天卖出股票后的最大收益
        # dp[2] 代表当天是冷冻期的最大收益
        # dp[3] 代表当天是持有股票后的最大收益
        # dp[4] 代表当天是持有股票,买入的股票价格
        dp = [[0, 0, 0, 0, 0], [0, 0, 0, 0, 0]]
        dp[1][1] = prices[1] - prices[0]
        dp[1][4] = prices[0]
        ret = max(ret, dp[1][1])
        for i in range(2, len(prices)):
            dp.append([0, 0, 0, 0, 0])
            dp[i][0] = dp[i -1][2]

            dp[i][1] = max(prices[i] - prices[i-1] + dp[i-1][0],
                        prices[i] - dp[i-1][4] + dp[i-1][3])
            ret = max(ret, dp[i][1])


            dp[i][2] = max(dp[i-1][1], dp[i-1][2])


            buy_hold = dp[i-1][0] - prices[i-1]
            hold_hold = dp[i-1][3] - dp[i-1][4]
            if buy_hold > hold_hold:
                dp[i][3] = dp[i-1][0]
                dp[i][4] = prices[i-1]
            else:
                dp[i][3] = dp[i-1][3]
                dp[i][4] = dp[i-1][4]
        return ret

注意,如果初始化 d p = [ [ 0 , 0 , 0 , 0 , 0 ] ] ∗ l e n ( p r i c e s ) dp = [[0, 0, 0, 0, 0]] * len(prices) dp=[[0,0,0,0,0]]len(prices),那么 d p dp dp 中所有的列表都是同一个,修改一个所有的都会跟着变动。

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

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

相关文章

3.26日总结

1.Fliptile Sample Input 4 4 1 0 0 1 0 1 1 0 0 1 1 0 1 0 0 1 Sample Output 0 0 0 0 1 0 0 1 1 0 0 1 0 0 0 0 题意:在题目输入的矩阵,在这个矩阵的基础上,通过最少基础反转,可以将矩阵元素全部变为0,如果不能达…

dbgpt部署教程,纯小白教程

1.打开git下载zip文件 下载地址: GitHub - eosphoros-ai/DB-GPT at v0.5.0 2.容器部署 2.1 先启动python3.10环境 docker run -itd --name dbgpt1 --gpus all --shm-size"32g" -p 60035:5000 -p 60037:7860 -p 60038:8000 \ -v /home/tmn/OAPD/jiayq/…

住在我心里的猴子:焦虑那些事儿 - 三余书屋 3ysw.net

精读文稿 您好,本期我们解读的是《住在我心里的猴子》。这是一本由患有焦虑症的作家所著,关于焦虑症的书。不仅如此,作者的父母和哥哥也都有焦虑症,而作者的母亲后来还成为了治疗焦虑症的专家。这本书的中文版大约有11万字&#x…

鸿蒙 HarmonyOS应用开发之API:Context

Context 是应用中对象的上下文,其提供了应用的一些基础信息,例如resourceManager(资源管理)、applicationInfo(当前应用信息)、dir(应用文件路径)、area(文件分区&#x…

Git基础(23):Git分支合并实战保姆式流程

文章目录 前言准备正常分支合并1. 创建两个不冲突分支2. 将dev合并到test 冲突分支合并1. 制造分支冲突2. 冲突合并 前言 Git分支合并操作 准备 这里先在Gitee创建了一个空仓库,方便远程查看内容。 正常分支合并 1. 创建两个不冲突分支 (1&#xf…

淘宝app商品数据API接口|item_get_app-获得淘宝app商品详情原数据

获得淘宝app商品详情原数据 API返回值说明 item_get_app-获得淘宝app商品详情原数据 公共参数​​​​​​ 名称类型必须描述keyString是调用key(必须以GET方式拼接在URL中)secretString是调用密钥api_nameString是API接口名称(包括在请求地…

pta L1-082 种钻石

L1-082 种钻石 分数 5 全屏浏览 切换布局 作者 陈越 单位 浙江大学 2019年10月29日,中央电视台专题报道,中国科学院在培育钻石领域,取得科技突破。科学家们用金刚石的籽晶片作为种子,利用甲烷气体在能量作用下形成碳的等离子体…

网络层介绍,IP地址分类以及作用

IP地址组成: TTL:生存时间 基于ICMP报文 特殊地址: 0.0.0.0-0.255.255.255 1.代表未指定的地址 默认路由 DHCP下发地址的时候,发个报文给DHCP服务器 临时用0.0.0.0借用地址,未指定地址。 2.全网地址:目…

前端小白的学习之路(webpack)

提示:webpack简介,nvm,npm配置环境,常用命令,基本web项目构建 目录 webpack 1.配置环境 1)node.js node常用命令 2)nvm nvm常用命令: 3)npm npm常用命令 2.构建简易web项目 1)创建目录 2)安装webpack依赖 3)配置 webpac…

全面剖析Java多线程编程,抢红包、抽奖实战案例

黑马Java进阶教程,全面剖析Java多线程编程,含抢红包、抽奖实战案例 1.什么是多线程? 2.并发与并行 CPU有这些,4,8,16,32,64 表示能同时进行的线程 3.多线程的第一种实现方式 package com.itheima.reggie;/*** Author lpc* Date …

Linux 系统 docker快速搭建PHP环境

PHP安装 ############################################################################# 1、直接拉取官方镜像 查找Docker Hub上的php镜像 docker search php 直接拉取官方镜像 docker run --name myphp --restartalways --network lnmp -d php:7.1-fpm 2、创建php容…

PyTorch----torch.nn.Linear()函数

torch.nn.Linear是PyTorch中的一个模块,用于在神经网络中实现完全连接层。它表示输入张量的一个线性变换通过将它与一个权矩阵相乘并加上一个偏置项。 下面是torch.nn.Linear的语法: torch.nn.Linear(in_features, out_features, biasTrue)参数: in_f…

CKS之镜像漏洞扫描工具:Trivy

目录 Trivy介绍 Trivy安装 Trivy使用命令 容器镜像扫描 打印指定(高危、严重)漏洞信息 JSON格式输出 HTML格式输出 离线扫描命令 离线更新Trivy数据库 Harbor安装Trivy Trivy介绍 Trivy是一款用于扫描容器镜像、文件系统、Git仓库等的漏洞扫描…

html列表标签错误问题

答案如下 问题&#xff1a;少了/符号&#xff0c;要对应上。 <i>咖啡</i> 解决之后的图片 答案如图所示

SD卡备份ubuntu镜像

设备及系统&#xff1a;nuc幻影峡谷工控机&#xff0c;ubuntu20.04 一、确定SD卡设备号的两种方法 方法1&#xff1a; 将有ubuntu镜像的SD卡插入读卡器&#xff0c;再将读卡器插入电脑主机&#xff0c;在 工具 中打开 磁盘&#xff0c;查看SD卡设备号&#xff0c;如下图所示…

2024年最新阿里云服务器价格表_CPU内存+磁盘+带宽价格

2024年阿里云服务器租用费用&#xff0c;云服务器ECS经济型e实例2核2G、3M固定带宽99元一年&#xff0c;轻量应用服务器2核2G3M带宽轻量服务器一年61元&#xff0c;ECS u1服务器2核4G5M固定带宽199元一年&#xff0c;2核4G4M带宽轻量服务器一年165元12个月&#xff0c;2核4G服务…

情感视频素材免费下载无水印,分享几个抖音热门情感视频素材网站

在当今这个短视频内容为王的时代&#xff0c;情感短视频无疑成为了最直接、最有效的情感传达方式之一。无论是用来表达生活点滴&#xff0c;还是用于品牌故事的讲述&#xff0c;一段精心制作的视频能够让人触动心弦&#xff0c;留下深刻印象。但是&#xff0c;优秀的情感视频素…

动听的洗牌游戏(Java篇ArrayList实操)

本篇会加入个人的所谓‘鱼式疯言’ ❤️❤️❤️鱼式疯言:❤️❤️❤️此疯言非彼疯言 而是理解过并总结出来通俗易懂的大白话, 小编会尽可能的在每个概念后插入鱼式疯言,帮助大家理解的. &#x1f92d;&#x1f92d;&#x1f92d;可能说的不是那么严谨.但小编初心是能让更多人…

【网安小白成长之路】1.PHP基本语法

&#x1f42e;博主syst1m 带你 acquire knowledge&#xff01; ✨博客首页——syst1m的博客&#x1f498; &#x1f51e; 《网安小白成长之路(我要变成大佬&#x1f60e;&#xff01;&#xff01;)》真实小白学习历程&#xff0c;手把手带你一起从入门到入狱&#x1f6ad; &…

醉龙酿掀起“酱香热”,醇厚酱香源自匠心坚守

醉龙酿掀起“酱香热”&#xff0c;醇厚酱香源自匠心坚守 作为世界酱香型白酒的发源地和主产区&#xff0c;茅台镇凭借优越的生态环境、独特的酿酒工艺以及悠久的酒文化历史&#xff0c;在中国白酒领域独树一帜。近年来&#xff0c;茅台酱香型白酒的热度持续升温&#xff0c;也…