【Leetcode】309. 最佳买卖股票时机含冷冻期

Java实现 LeetCode 309 最佳买卖股票时机含冷冻期 309. 最佳买卖股票时机含冷冻期 给定一个整数数组,其中第 i 个元素代表了第 i 天的股票价格 。​ 设计一个算法计算出最大利润。在满足以下约束条件下,你可以尽可能地完成更多的交易(多次买卖一支股票): 你不能同时参与多笔交易(你必须在再次购买前出售掉之前的股票)。 卖出股票后,你无法在第二天买入股票 (即冷冻期为 1 天)。 示例: 输入: [1,2,3,0,2] 输出: 3 解释: 对应的... 阅读详情

题目

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

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

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

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

来源:力扣(LeetCode)
链接:https://leetcode-cn.com/problems/best-time-to-buy-and-sell-stock-with-cooldown

思路

题目有几个关键点需要注意,1,只能卖掉了之后才能买入,也就是所说的“不能同时参与多个交易”,2,有个冷冻期,就是卖掉之后不能立刻买入,3,你可以选择不进行任何行为,也就是保持原样。
那么来分析一下,不管前面的状态如何,假如要保证现在的利益最大化,那么,分以下几种情况:
1.如果当前是持有股票,那么前一个状态只能是“持有”或者是“冷冻期”,那么此时最大利益应该为这两个中间的最大值
2.如果当前是不持有股票,那么前一个状态只能是“持有”或者“不持有”,那么此时的最大利益也就是两个中间的最大值
3.如果当前是冷冻期,那么前一个状态一定是“卖出”
因此,假设dp[i][j]为第i步状态为j时的最大利益,其中,j=0表示持有,j=1表示不持有,j=2表示冷冻期,可以写出状态转移方程为:
dp[i][0] = max(dp[i-1][2] - prices[i], dp[i-1][0])
dp[i][1] = max(dp[i-1][0] + prices[i], dp[i-1][1])
dp[i][2] = dp[i-1][1]
那么代码就很容易写了

代码

class Solution:
    def maxProfit(self, prices: List[int]) -> int:
        n = len(prices)
        if(n<2):
            return 0
        dp = [[0 for i in range(3)] for j in range(n)]
        dp[0][0] = -prices[0]
        dp[0][1] = 0
        dp[0][2] = 0
        for i in range(1,n):
            dp[i][0] = max(dp[i-1][2]-prices[i],dp[i-1][0])
            dp[i][1] = max(dp[i-1][0]+prices[i],dp[i-1][1])
            dp[i][2] = dp[i-1][1]
        return max(dp[n-1][1],dp[n-1][2])
Logstash安装部署 1. 部署及安装所用的用户不能是root。 阅读详情

相关推荐

FICO F.27 Customer statement 打印

需求,定制化打印,替换标准的F.27打印 类似于采购订单的打印,但是略有不同,查阅资料之后步骤如下: T-code F.27 is SAP standard program to produce customer/vendor correspondence (letter). Correspondence Type is used to specify the related printing program and form for the particular correspondence. SAP

IamRunjiang的博客 1969

LeetCode第309题_最佳买卖股票时机含冷冻期

本文解析LeetCode 309题"最佳买卖股票时机含冷冻期",使用状态机动态规划方法,提供C#、Python、C++三种实现。通过定义持有股票、冷冻期和不冷冻三种状态,设计状态转移方程求解最大利润。文章包含详细的状态转移分析、执行结果对比和常见错误提示。该解法时间复杂度O(n),空间复杂度可优化至O(1)。适合想要提升动态规划能力的程序员学习参考。

qq_40263592的博客 1252

CELF(Cost-Effective Lazy Forward selection)具有成本效益的惰性前向选择算法

CELF(Cost-Effective Lazy Forward selection)算法解析      引言:在社交网络影响力最大化问题的求解过程中,我们往往需要去选择一些目标种子结点作为信息初始传播的源头。贪婪算法在传播效果上的解决可以达到影响的最大化,但是在时间复杂度上面显得确十分糟糕。为此CELF算法应势而生,CELF算法利用了函数次模性的特点,在第一轮选择种子结点时,计算网络中所有节点的边际收益,但将在之后的过程中,不再做网络节点边际收益的重复计算,这相对于传统的贪婪算法,将在时间上得到非常明显的

hahaxq的博客 2478

力扣刷题笔记 309. 最佳买卖股票时机含冷冻期 C#

今日签到题,题目如下: 给定一个整数数组,其中第i个元素代表了第i天的股票价格 。​ 设计一个算法计算出最大利润。在满足以下约束条件下,你可以尽可能地完成更多的交易(多次买卖一支股票): 你不能同时参与多笔交易(你必须在再次购买前出售掉之前的股票)。 卖出股票后,你无法在第二天买入股票 (即冷冻期为 1 天)。 示例: 输入: [1,2,3,0,2] 输出: 3 解释: 对应的交易状态为: [买入, 卖出, 冷冻期, 买入, 卖出] 来源:力扣(LeetCode) 链接:https:/...

cjc52294的博客 267

Windows系统监控实战:Grafana+Prometheus+node_exporter保姆级配置指南(含常见问题解决)

本文提供了一份详尽的Windows系统监控实战指南,详细讲解了如何从零部署Grafana、Prometheus和node_exporter(实际为windows_exporter)监控栈。内容涵盖核心组件认知、分步配置解析、高级生产环境考量,并重点针对配置过程中常见的“No Data”问题提供了系统性的排查手册,旨在帮助用户快速搭建稳定可靠的系统资源监控平台。

weixin_29197835的博客 1009

Yolov5s可视化网络结构图

Yolov5共有四种网络结构,每种网络深度和宽度上都不相同。 (1) Yolov5s可视化网络结构图:点击查看 (2) Yolov5m可视化网络结构图:点击查看 (3) Yolov5l可视化网络结构图:点击查看 (4) Yolov5x可视化网络结构图:点击查看 ...

江南研习社 15万+

【必备算法】动态规划:LeetCode题(九)309. 最佳买卖股票时机含冷冻期,714. 买卖股票的最佳含手续费

188. 买卖股票的最佳时机 IV³ 给定一个数组,它的第 i 个元素是一支给定的股票在第 i 天的价格。 设计一个算法来计算你所能获取的最大利润。你最多可以完成 k 笔交易。 注意: 你不能同时参与多笔交易(你必须在再次购买前出售掉之前的股票)。 示例 1: 输入: [2,4,1], k = 2 输出: 2 解释: 在第 1 天 (股票价格 = 2) 的时候买入,在第 2 天 (股票价格 = 4) 的时候卖出,这笔交易所能获得利润 = 4-2 = 2 。 示例 2: 输入: [3,2,6,5,0,3],

A minor 2296

STM32驱动数码管:从硬件连接到动态显示实现

本文详细介绍了使用STM32单片机驱动数码管的完整流程,从硬件连接到软件实现。内容涵盖共阳/共阴数码管原理、GPIO配置、段码表生成,并重点解析了多位数码管动态显示的核心技术,包括动态扫描原理、消影处理及实战代码,帮助开发者快速掌握这一嵌入式开发基础技能。

p5l2m9n4o6q的博客 576

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

给定一个整数数组prices,其中第 prices[i] 表示第 i 天的股票价格 。​设计一个算法计算出最大利润。在满足以下约束条件下,你可以尽可能地完成更多的交易(多次买卖一支股票): 卖出股票后,你无法在第二天买入股票 (即冷冻期为 1 天)。 注意:你不能同时参与多笔交易(你必须在再次购买前出售掉之前的股票)。 卖出股票后的第 2 天为冷冻期。即:方法:动态规划 1、状态定义:dp[i][j] 表示 [0, i] 区间内,在下标为 i 这一天状态为 j 时,我们手上拥有的金钱数。 这里的 j 可以

46426906的博客 639

手把手教你学Simulink--双足机器人的自动避障控制策略仿真

自动避障是双足机器人导航系统中的一个关键功能,它允许机器人在动态或静态环境中自主地避开障碍物。实现这一功能通常需要结合路径规划、环境感知和实时控制算法。在本教程中,我们将使用MATLAB和Simulink来创建一个简化版的双足机器人自动避障控制系统仿真。

MHD0815的博客 160

STM32 W5500 Freemodbus Modbus TCP协议功能实现

STM32F103VCT6 W5500(SPI1),实现Modbus-TCP协议的功能

坚韧与专注 2万+

golang力扣leetcode 309.最佳买卖股票时机含冷冻期

309.最佳买卖股票时机含冷冻期309.最佳买卖股票时机含冷冻期题解代码 309.最佳买卖股票时机含冷冻期 309.最佳买卖股票时机含冷冻期 题解 题目:一次操作可以买股票,卖股票,啥都不干,在卖股票的下一天是冷冻期,不能买股票,求最大利润 思路:dp State: dp[i][0]持股 时的最大利润 dp[i][1]不持股 时的最大利润 dp[i][2]冷冻期 时的最大利润 Function: //持股的状态转移:【上一次持股,这次啥都不干】,或者【冷冻期之后买入本次的股票】 dp[

清风 551

【大模型】DeepSeek 高级提示词技巧使用详解

DeepSeek 高级提示词技巧使用详解

congge 1万+

代码随想录算法训练营Day36 | Leetcode188.买卖股票的最佳时机IV、309.最佳买卖股票时机含冷冻期、714.买卖股票的最佳时机含手续费

给你一个整数数组 prices 和一个整数 k ,其中 prices[i] 是某支给定的股票在第 i 天的价格。你最多可以完成 k 笔交易。唯一差别在于递推公式部分,dp 数组的含义为dp[i][0] 表示第 i 天持有股票所得最多现金, dp[i][1] 表示第 i 天不持有股票所得最多现金。dp[i][1] 表示的是第 i 天,买入股票的状态,但并不是说一定要第 i 天买入股票。同理可以推出 dp[0][j] 当 j 为奇数的时候都初始化为 -prices[0], 当 j 为偶数的时候都初始化为 0。

叽里呱啦大王的博客 1051

NTscan扫描工具

ntscan是一个扫描器,可以扫描没有密码和弱密码的共享,先到配置文件中填写猜测的用户名和密码,扫描过程中右侧出现的是扫描日志。

C# WinForm 基于DirectShow.dll编写的程序,可边预览边保存视频,音频和图片

基于微软的DirectShow.dll的二次开发1.自动识别连接的摄像头跟麦克风且可以对其进行选择(默认选中第一个)2.可录制wmv和avi两种格式的视频并且都带有音频,avi可以录制的分辨率和帧数进行选择,wmv默认进行了淸晰度优化如不喜欢可去除代码中有相关提示3.可在预览点开之后进行拍照,也可边录制视频边拍照4.添加了视频和音频的压缩功能(酌情使用)这次二次开发发现C#对DirectShow的相关信息太少,这次做完也不敢藏私共享出来,还望大家指正

Leetcode309. 最佳买卖股票时机含冷冻期(C语言)

Leetcode309. 最佳买卖股票时机含冷冻期(C语言) 算法-动态规划(股票交易):算法与数据结构参考 题目: 给定一个整数数组,其中第 i 个元素代表了第 i 天的股票价格 。​计算出最大利润。 尽可能地完成更多的交易(多次买卖一支股票); 你不能同时参与多笔交易(你必须在再次购买前出售掉之前的股票)。 卖出股票后,你无法在第二天买入股票 (即冷冻期为 1 天)。例: 输入: [1,2,3...

jeanlu的博客 309

TMS_WebGMaps_1.9.8.0_Full_Source

TMS_WebGMaps_1.9.8.0_Full_Source 全源码 delphi cbuilder

309最佳买卖股票时机含冷冻期——力扣算法系列2020.07.10 Python

2020.07.10 周四 题目:309最佳买卖股票时机含冷冻期 给定一个整数数组,其中第 i 个元素代表了第 i 天的股票价格 。​ 设计一个算法计算出最大利润。在满足以下约束条件下,你可以尽可能地完成更多的交易(多次买卖一支股票): 你不能同时参与多笔交易(你必须在再次购买前出售掉之前的股票)。 卖出股票后,你无法在第二天买入股票 (即冷冻期为 1 天)。 示例: 输入: [1,2,3,0,2] 输出: 3 解释: 对应的交易状态为: [买入, 卖出, 冷冻期, 买入, 卖出] 来源:力扣(Leet

weixin_43401055的博客 232

复分析 阿尔福斯(Ahlfors) 第三版答案 英文

答案分为十章,有部分习题没有答案,全英文复分析阿尔福斯(Ahlfors) 第三版答案

leetcode-309:最佳买卖股票时机含冷冻期

leetcode-309:最佳买卖股票时机含冷冻期题目解题方法一:动态规划 题目 题目链接 给定一个整数数组,其中第 i 个元素代表了第 i 天的股票价格 。​ 设计一个算法计算出最大利润。在满足以下约束条件下,你可以尽可能地完成更多的交易(多次买卖一支股票): 你不能同时参与多笔交易(你必须在再次购买前出售掉之前的股票)。 卖出股票后,你无法在第二天买入股票 (即冷冻期为 1 天)。 示例: 输入: [1,2,3,0,2] 输出: 3 解释: 对应的交易状态为: [买入, 卖出, 冷冻期, 买入,

菊头蝙蝠的博客 325

leetcode(力扣) 309. 最佳买卖股票时机含冷冻期 (动态规划)

主要是为了给持有状态下使用的,持有状态中有一个情况是:今天买入,则前一天不能卖的约束,而这里分出来的情况刚好应对这种约束,即i天买入变为持有状态,则 i-1 天为非持有且非i-1天卖的情况,也就是上面分的情况里的第二个。第 i天非持有状态,且非i天当天卖出: dp[i][0]=max(dp[i-1][0],dp[i-1][2])第 i 天持有状态 :dp[i][1]=max(dp[i-1][1],dp[i-1][0]-p[i])第 i天非持有状态,且非i天当天卖出 :定义状态为dp[0][0]

深度不学习!!的博客 390

0动态规划中等 leetcode309. 最佳买卖股票时机含冷冻期

import java.lang.Math; class Solution { /* 主要参考了“liweiwei1419”的解答: https://leetcode-cn.com/problems/best-time-to-buy-and-sell-stock-with-cooldown/solution/dong-tai-gui-hua-by-liweiwei1419-...

31楼下小黑的博客 247

[LeetCode] 309、最佳买卖股票时机含冷冻期

题目描述 给定一个整数数组,其中第 i 个元素代表了第 i 天的股票价格 。设计一个算法计算出最大利润。在满足以下约束条件下,你可以尽可能地完成更多的交易(多次买卖一支股票): 你不能同时参与多笔交易(你必须在再次购买前出售掉之前的股票)。 卖出股票后,你无法在第二天买入股票 (即冷冻期为 1 天)。 解题思路 “股票买卖”这个系列有好几道题,labuladong大佬有一个“一个通用方法团灭 ...

aift的专栏 200

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

LeetCode-309-最佳买卖股票时机含冷冻期 思路 这是一道存在冷冻期的股票问题,因此无法连续买入卖出,存在三种状态,使用动态规划解决,依旧可以使用滚动数组,优化空间复杂度 初始化 int dp0=0;//手里没有股票,不处于冷冻期 int dp1=0;//手里没有股票,处于冷冻期 int dp2=-prices[0];//手里有股票 状态转移 int newdp0=Math.max(dp0,dp1);//昨天没股票处于或不处于冷冻期 int newdp1=dp2+prices[i];//昨天

HuangMuCheng的博客 93

算法记录Day51|leetcode 309.最佳买卖股票时机含冷冻期、714.买卖股票的最佳时机含手续费

打卡leetcode 309.最佳买卖股票时机含冷冻期、714.买卖股票的最佳时机含手续费

miyu325的博客 355

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

只关注卖出的那一天!只关注卖出的那一天!只关注卖出的那一天!题目中定义的“冷冻期”=卖出的那一天的后一天,题目设置冷冻期的意思是,如果昨天卖出了,今天不可买入,那么关键在于哪一天卖出,只要在今天想买入的时候判断一下前一天是不是刚卖出,即可,所以关键的一天其实是卖出的那一天,而不是卖出的后一天因为当天卖出股票实际上也是属于“不持有”的状态,那么第i天如果不持有,那这个“不持有”就有了两种状态:1.本来就不持有,指不是因为当天卖出了才不持有的;2.第i天因为卖出了股票才变得不持有。

Helene1996的博客 1024

【LeetCode】 309.最佳买卖股票时机含冷冻期

day147

weixin_43894455的博客 1561

【LeetCode股票买卖系列:309. 最佳买卖股票时机含冷冻期 | 暴力递归=>记忆化搜索=>动态规划】

【LeetCode股票买卖系列:309. 最佳买卖股票时机含冷冻期 | 暴力递归=>记忆化搜索=>动态规划】给定一个整数数组prices,其中第 prices[i] 表示第 i 天的股票价格 。​设计一个算法计算出最大利润。在满足以下约束条件下,你可以尽可能地完成更多的交易(多次买卖一支股票):卖出股票后,你无法在第二天买入股票 (即冷冻期为 1 天)。 注意:你不能同时🌲 算法刷题专栏 | 面试必备算法 | 面试高频算法 🍀🌲 越难的东西,越要努力坚持,因为它具有很高的价值,算法就是这样✨

Coder_ljw的博客 1000

leetcode309最佳买卖股票时机含冷冻期刷题打卡

设计一个算法计算出最大利润。**注意:**你不能同时参与多笔交易(你必须在再次购买前出售掉之前的股票)。的区别,该题有一个冷却期,就是卖出彩票后要等一天才能买彩票,所以第二个方向是。与2的区别就在于多了一个冷却时间的条件,代码区别就在于递推公式。:就是照着前一天的不持有彩票来办,或者是卖出当天的彩票来办。:有两个方向,一个是照着前一天持有彩票来办,另一个就是与。不持有股票的所得现金 减去 今天的股票价格。代表持有股票获得的最大价值,代表不持有股票获得的最大价值。

qq_51011672的博客 373
上一篇: 【Leetcode】120. 三角形最小路径和
下一篇: 【Leetcode】563. 二叉树的坡度
voidfaceless
博客等级 码龄10年 100粉丝 114原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值