代码随想录——买卖股票最佳时机Ⅲ(Leetcode 123)

news2024/9/21 0:29:21

题目链接
在这里插入图片描述

动态规划

动态规划思路:

  • 确定dp数组以及下标的含义
    一天一共就有五个状态,
    • 没有操作 (其实我们也可以不设置这个状态)
    • 第一次持有股票
    • 第一次不持有股票
    • 第二次持有股票
    • 第二次不持有股票
      dp[i][j]中 i表示第i天,j为 [0 - 4] 五个状态,dp[i][j]表示第i天状态j所剩最大现金。

需要注意:dp[i][1],表示的是第i天,买入股票的状态,并不是说一定要第i天买入股票,这是很多同学容易陷入的误区。

  • 确定递推公式

达到dp[i][1]状态,有两个具体操作:

  • 操作一:第i天买入股票了,那么dp[i][1] = dp[i-1][0] - prices[i]
  • 操作二:第i天没有操作,而是沿用前一天买入的状态,即:dp[i][1] = dp[i - 1][1]
    dp[i][1] = max(dp[i-1][0] - prices[i], dp[i - 1][1]);

同理dp[i][2]也有两个操作:

  • 操作一:第i天卖出股票了,那么dp[i][2] = dp[i - 1][1] + prices[i]
  • 操作二:第i天没有操作,沿用前一天卖出股票的状态,即:dp[i][2] = dp[i - 1][2] 所以dp[i][2] = max(dp[i - 1][1] + prices[i], dp[i - 1][2])

同理可推出剩下状态部分:

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

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

  • dp数组如何初始化

    • 第0天没有操作,dp[0][0] = 0;
    • 第0天做第一次买入的操作,dp[0][1] = -prices[0];
    • 第0天做第一次卖出的操作,dp[0][2] = 0;
    • 第0天第二次买入操作,dp[0][3] = -prices[0];
    • 第0天第二次卖出初始化,dp[0][4] = 0;
  • 确定遍历顺序
    从递归公式其实已经可以看出,一定是从前向后遍历,因为dp[i],依靠dp[i - 1]的数值。

class Solution {
    public int maxProfit(int[] prices) {
        int[][] dp = new int[prices.length][5];
        // 初始化
        dp[0][0] = 0; // 不操作
        dp[0][1] = -prices[0]; // 第一次持有股票
        dp[0][2] = 0; // 第一次不持有股票
        dp[0][3] = -prices[0]; //第二次持有股票
        dp[0][4] = 0; //第二次不持有股票
        
        // dp更新寻找最大利润
        for(int i = 1; i < prices.length; i++){
            for(int j = 0; j <= 5; j++){
                dp[i][0] = dp[i - 1][0];
                dp[i][1] = Math.max(dp[i - 1][1], dp[i - 1][0] - prices[i]);
                dp[i][2] = Math.max(dp[i - 1][2], dp[i - 1][1] + prices[i]);
                dp[i][3] = Math.max(dp[i - 1][3], dp[i - 1][2] - prices[i]);
                dp[i][4] = Math.max(dp[i - 1][4], dp[i - 1][3] + prices[i]);

            }
        }

		// 最大的时候一定是卖出的状态,而两次卖出的状态现金最大一定是最后一次卖出
		// 如果第一次卖出已经是最大值了,那么我们可以在当天立刻买入再立刻卖出。所以dp[4][4]已经包含了dp[4][2]的情况。也就是说第二次卖出手里所剩的钱一定是最多的
        return dp[prices.length - 1][4];
    }
}

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

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

相关文章

医院综合绩效核算系统,绩效核算系统源码,采用springboot+avue+MySQL技术开发,可适应医院多种绩效核算方式。

一、系统概述 作为医院用综合绩效核算系统&#xff0c;系统需要和his系统进行对接&#xff0c;按照设定周期&#xff0c;从his系统获取医院科室和医生、护士、其他人员工作量&#xff0c;对没有录入信息化系统的工作量&#xff0c;绩效考核系统设有手工录入功能&#xff08;可…

论文速递|Management Science 6月文章合集

编者按&#xff1a; 在本系列文章中&#xff0c;我们梳理了运筹学顶刊MSOM在2024年6月份发布的7篇文章的基本信息&#xff0c;旨在帮助读者快速洞察行业最新动态。 文章1 题目 Promotional Inventory Displays: An Empirical Analysis Using IoT Data促销库存展示&#xff1…

dubbo调用知多少?

一 dubbo超时时间的设置 定义&#xff1a;这里说的超时&#xff0c;是针对dubbo provider调用方来说的&#xff0c;比如提供方执行需要3秒&#xff0c;设置了超时时间1秒&#xff08;默认&#xff09;&#xff0c;则consumer调用方会报超时错误&#xff0c;但实际上服务提供方…

抖音短视频矩阵管理:就靠它,让运营更高效

在数字化时代&#xff0c;短视频已成为连接创作者与观众的重要桥梁。抖音作为全球领先的短视频平台&#xff0c;汇聚了海量的创作者和用户。然而&#xff0c;随着个人或品牌账号的增多&#xff0c;如何高效地管理这些抖音短视频矩阵&#xff0c;成为了一个亟待解决的问题。本文…

气膜游乐园:孩子们的新乐园—轻空间

随着科技的发展和人们对健康、安全娱乐环境的重视&#xff0c;气膜建筑逐渐成为游乐休闲项目中的新选择。作为这种创新建筑的一种应用形式&#xff0c;气膜游乐园正在越来越多地受到家庭和孩子们的欢迎。它不仅提供了一个安全、舒适的玩乐空间&#xff0c;还创造了丰富多样的活…

什么牌子的洗地机好用?推荐多款质量好洗地机的品牌

近些年大家对家庭生活环境的舒适和健康越来越重视&#xff0c;然而家务活的种类繁多&#xff0c;每次都要耗费大量的时间和精力&#xff0c;就拿擦地来说&#xff0c;每次都需要先扫地&#xff0c;再擦地&#xff0c;然后中间可能还要多次洗拖布等&#xff0c;十分繁琐。 因此…

数据分析:两组数据的T检验power评估

禁止商业或二改转载&#xff0c;仅供自学使用&#xff0c;侵权必究&#xff0c;如需截取部分内容请后台联系作者! 介绍 功效分析&#xff08;power analysis&#xff09;是在实验设计阶段进行的&#xff0c;用于确定在给定的效应量、显著性水平和样本大小下&#xff0c;实验能…

mysql进阶语法

mysql高阶语句 高级语法的查询语句 先创建库和表 排序语法&#xff0c;关键字排序 升序和降序 默认的排序方式就是降序 升&#xff1a;ASC 降序&#xff1a;DESC 配合&#xff1a;order by语法 降序排列&#xff1a;要指定列 select * from 数字 多个列升序 如果以…

三星电子推出性能更强、容量更大的升级版1TB microSD 存储卡

microSD 存储卡 PRO Plus 和 EVO Plus 采用三星先进的 V-NAND 技术&#xff0c;可安全可靠地捕捉和存储日常瞬间 性能提升后&#xff0c;顺序读取速度高达 180MB/s&#xff0c;传输速度达 160MB/s&#xff0c;可轻松处理较大文件 韩国首尔--2024年7月31日--三星电子宣布推出1…

中职软件测试实训室

在当今信息化高速发展的时代&#xff0c;软件作为信息技术的核心&#xff0c;其质量直接关系到用户的使用体验和企业的市场竞争力。因此&#xff0c;软件测试作为保障软件质量的重要环节&#xff0c;越来越受到业界的重视。为了满足社会对软件测试人才的需求&#xff0c;中职教…

springboot闲置图书分享boot--论文源码调试讲解

第2章 程序开发技术 2.1 Mysql数据库 开发的程序面向用户的只是程序的功能界面&#xff0c;让用户操作程序界面的各个功能&#xff0c;那么很多人就会问&#xff0c;用户使用程序功能生成的数据信息放在哪里的&#xff1f;这个就需要涉及到数据库的知识了&#xff0c;一般来说…

object的defineProperty与Proxy对比

Object.defineProperty 循环执行Object.defineProperty方法遍历对象的每一个属性&#xff0c;给每一个属性增加get和set方法&#xff0c;使得我们在读取和设置属性值的时候都会被Vue给监听到&#xff0c;从而去做一些其他的操作。 代码示例&#xff1a; let obj {a:1,b:2,c:…

善于运用facebook自动化规则,将节省你50%的时间

许多facebook广告投手都会花大量时间在盯盘看数据上&#xff0c;从而导致没有太多时间和精力去做广告素材的优化&#xff0c;其实常规的一些数据盯盘都可以交给facebook自动化规则&#xff0c;包括增减预算&#xff0c;暂停广告等&#xff0c;合理运用自动化规则&#xff0c;可…

前端必知必会-html表单元素

文章目录 HTML 表单元素HTML <form> 元素<input> 元素<label> 元素<select> 元素<option> 元素定义一个可选择的选项。<textarea> 元素<button> 元素<fieldset> 和 <legend> 元素<datalist> 元素<output> 元…

Aker ASA引领行业变革,旗下互联网投融资平台重磅起航

全球领先的海洋科技公司 Aker ASA 正式宣布,将于近期推出其全新的互联网海洋产业投融资平台。这一平台的推出标志着Aker ASA在海洋资源开发和投融资领域的又一重大进展,旨在为投资者提供创新、可靠的投资机会,同时推动海洋产业的可持续发展。 Aker ASA 作为行业内的领导者,以其…

开源AI智能名片O2O商城微信小程序在顾客价值链优化中的应用与探索

摘要&#xff1a;随着信息技术的飞速发展&#xff0c;顾客的消费行为模式正经历着前所未有的变革。在这一背景下&#xff0c;开源AI智能名片O2O商城微信小程序作为一种创新的营销与服务平台&#xff0c;正逐步成为企业连接顾客、优化顾客价值链的重要工具。本文旨在探讨开源AI智…

【IEEE出版】第五届大数据、人工智能与软件工程国际研讨会(ICBASE 2024,9月20-22)

第五届大数据、人工智能与软件工程国际研讨会&#xff08;ICBASE 2024&#xff09;将于2024年09月20-22日在中国温州隆重举行。 会议主要围绕大数据、人工智能与软件工程等研究领域展开讨论。会议旨在为从事大数据、人工智能与软件工程研究的专家学者、工程技术人员、技术研发人…

Echarts 横向条形图的右侧标签靠右显示对齐,不被遮挡

解决方案&#xff1a; 再添加一个y轴&#xff0c;隐藏刻度线即可。 配置如下&#xff1a; 在这里插入代码片yAxis: [{type: category,axisLine: {lineStyle: {color: #EFEFEF, // 轴线颜色width: 1, // 轴线线宽type: solid // 轴线线条类型&#xff0c;可选为 solid、dashed…

<数据集>遥感航拍船舶识别数据集<目标检测>

数据集格式&#xff1a;VOCYOLO格式 图片数量&#xff1a;17575张 标注数量(xml文件个数)&#xff1a;17575 标注数量(txt文件个数)&#xff1a;17575 标注类别数&#xff1a;1 标注类别名称&#xff1a;[ship] 使用标注工具&#xff1a;labelImg 标注规则&#xff1a;对…

Python文献调研(四)QtDesigner的布局

一、新建项目&#xff1a; 1.打开pycharm&#xff0c;新建一个Python项目 &#xff08;1&#xff09;右键项目列表区&#xff0c;找到我们之前配置好的外部工具&#xff0c;点击Pyside6 QtDesigner 打开Qt Designer后会是这个界面&#xff1a; &#xff08;2&#xff09;此时…