这篇page是针对leetcode上的123.买股票的最佳时机Ⅲ所写的。小尼先简单的说明一下这道题的意思,就是我们给定一个数组,它的第i个元素表示的是一支股票在第i天的价格,我们需要设计一个算法表示我们如果进行两次交易我们可以得到的最大金额。

其实这道题也是接着小尼之前所写的几道题来的,小尼先做一个简单的分析,我们在这道题中还是取一个最优解的思想,小尼在这里也是同样给出动态规划五部曲:

1、确定dp数组以及下标的含义:

我们将它分为五个状态:0、没有操作

1、第一次买入

2、第一次卖出

3、第二次买入

4、第二次卖出

我们这里利用二维数组进行对应的表示:dp[i][j]中i表示为第i天,j为0-4的五个状态,dp[i][j]就是表示第i天状态j下所剩的最大现金。

2、确定递推公式:

我们首先对dp[i][1]也就是第一次买入的状态进行分析,我们一共有两种情况,第一种就是我们第i天买入了股票dp[i][1] = dp[i-1][0] - prices[i];第二种情况就是第i天没有操作,而是直接沿用前一天买入的情况dp[i][1] = dp[i-1][1];所以我们可以推出dp[u][1] = max(dp[i - 1][0] - prices[i], dp[i - 1][1])

同理我们可以推出dp[i][2] = max(dp[i][1] + prices[i], dp[i - 1][2]) ; dp[i][3] = max(dp[i - 1][3],dp[i ][2] - prices[i]) ; dp[i][4] = max(dp[i - 1][4],dp[i][3] + prices[i])

3、如何对dp数组进行初始化:

我们第0天没有做任何的操作,那么我们就是直接对我们的dp[0][0] = 0; 然后我们第0天对第一次做买入的操作,就是dp[0][1] = -prices[0];同理我们也需要对第二次做一个买入的操作,即dp[0][2] = 0;我们一定需要知道的是虽然我们在这里对我们的初始化了一个负值的操作,但是在我们的代码中我们会比较我们的大小的一个操作,所以我们只需要直接比较即可,接下来,小尼拉一下解决这道题的代码:

class Solution {public int maxProfit(int[] prices) {int len = prices.length;if(prices.length == 0) return 0;int[][] dp = new int[len][5];dp[0][1] = -prices[0];dp[0][3] = -prices[0];for(int i = 1; i < len ; i++){dp[i][1] = Math.max(dp[i-1][1],-prices[i]);dp[i][2] = Math.max(dp[i-1][2],dp[i][1] + prices[i]);dp[i][3] = Math.max(dp[i-1][3],dp[i][2] - prices[i]);dp[i][4] = Math.max(dp[i-1][4],dp[i][3] + prices[i]); }return dp[len - 1][4];}
}

小尼对上面的代码做一个简单的分析,其实我们这里就是进行了一个买入和卖出的操作,小尼直接先说一下买入的操作,我们在买入的时候我们就会有两种选择,第一种就i是我们直接就是延续我们上一次买入了的操作,第二种就是我们还没有买入,我们直接拿我们没有买入的钱取直接进行购买,在这里因为我们购买需要花钱,所以我们直接就是拿今天没有持股票的钱直接减去我们的prices[i]即可,然后就是小尼接着说卖出的操作,我们会有的状态也是有两种,第一种就是我们延续上一次我们就已经卖出的钱,第二种就是我们在今天将我们已经持有的物品进行对应对卖出,我们卖出之后我们是挣钱的,所以我们直接就是加上我们的prices[i]即可,我们不管有多少次可以进行持股,我们只需要不断的操作即可

希望上面的代码可以帮助到小伙伴们~~~

My Eighty-sixth Page - 买股票的最佳时机Ⅲ - By Nicolas相关推荐

  1. 买股票的最佳时机(六种题解dp)

    引言 买股票的最佳时机类的题目也是很经典的动态规划题目,出题人通过各种花里胡哨的买股票方法来考察(虐待)你,下面我们就开始看看一类的题目的各种花样: 买股票的最佳时机 给定一个数组 prices ,它 ...

  2. LeetCode——第121题:买股票的最佳时机

    题目: 给定一个数组,它的第 i 个元素是一支给定股票第 i 天的价格. 如果你最多只允许完成一笔交易(即买入和卖出一支股票),设计一个算法来计算你所能获取的最大利润. 注意你不能在买入股票前卖出股票 ...

  3. python购买股票_动态规划python实现-买股票的最佳时机

    买股票的最佳时机(动态规划python实现) 给定一个数组,它的第 i 个元素是一支给定股票第 i 天的价格. 如果你最多只允许完成一笔交易(即买入和卖出一支股票),设计一个算法来计算你所能获取的最大 ...

  4. leetcode-java买股票的最佳时机

    买股票的最佳时机 题目描述: 如果你最多只允许完成一笔交易(即买入和卖出一支股票),设计一个算法来计算你所能获取的最大利润.注意你不能在买入股票前卖出股票.示例 1:输入: [7,1,5,3,6,4] ...

  5. leetcode_买股票的最佳时机----Python

    题目名称深深地吸引了我 买股票的最佳时机1 题目 给定一个数组,它的第 i 个元素是一支给定股票第 i 天的价格. 如果你最多只允许完成一笔交易(即买入和卖出一支股票),设计一个算法来计算你所能获取的 ...

  6. 【Leetcode122 -买股票的最佳时机 II Best Time to Buy and Sell Stock II】(C语言)

    目录 ​​​​​​​ 买股票的最佳时机II 测试单元 题目分析 标准版 巧妙版(简称投机取巧版) 买股票的最佳时机II 给定一个数组,它的第i个元素是一支给定股票第i天的价格. 设计一个算法来计算你所 ...

  7. 买股票的最佳时机--dp问题

    dp问题,一般想再加入一个数的下一个状态的可能性 问题1:买股票的最佳时机1 给定一个数组 prices ,其中 prices[i] 表示股票第 i 天的价格. 在每一天,你可能会决定购买和/或出售股 ...

  8. 121 买股票的最佳时机

    121 买股票的最佳时机 给定一个数组 prices ,它的第 i 个元素 prices[i] 表示一支给定股票第 i 天的价格. 你只能选择 某一天 买入这只股票,并选择在 未来的某一个不同的日子 ...

  9. 31 - 买股票的最佳时机问题

    文章目录 1. 买股票的最佳时机I 2. 买股票的最佳时机II 3. 最佳买卖股票时机 4. 买股票的最佳时机III 5. 买股票的最佳时机IV 1. 买股票的最佳时机I dp数组含义,本题两个状态: ...

最新文章

  1. 跨模态学习在三维语义分割领域适应中的应用
  2. 王卡为何解封40g显示服务器开拆,腾讯大王卡40G流量用完了怎么办 腾讯大王卡解封以及解封后流量收费介绍...
  3. 计算机二级考试常用代码,二级计算机VB考试常用代码(看完必过).doc
  4. linux命令:mkdir 命令详解
  5. Callable创建多线程
  6. 后端开发必备的 MySQL 日志文件知识点
  7. 松下机器人找原点步骤_桁架机器人在汽车座椅安装生产线中的应用
  8. 2017-06-23
  9. 添加到界面前获取尺寸
  10. python鼠标自动点击脚本_用Python实现鼠标自动点击
  11. 车载与体征/手势检测 毫米波雷达信号处理流程
  12. 2022DIY电脑配置入门篇(包含各cpu显卡天梯图对比)
  13. python 网页截图不全_Selenium webdriver 截图 太长截不全的问题
  14. 大量数据表的优化方案
  15. 情侣生日纪念日倒数提醒的便签
  16. 基于uml的大学图书馆图书信息管理系统设计实验_全国大学最美图书馆排行!这个学校居然有按摩服务?!...
  17. 七天学习微信小程序开发(一)—— 学习笔记
  18. Error: Cannot find module ‘process-nextick-args‘,error:0308010C:digital envelope routines::unsupport
  19. linux模拟器玩三国战记,三国战纪手游下载(街机)-三国战纪安卓官网版v0.14.30.0-Linux公社...
  20. Coherence-Enhancing Shock Filters 代码及详细注释【OpenCV】

热门文章

  1. 挨踢库(进名企就这么简单)实战开发-李珊-专题视频课程
  2. HDFS精华文章汇总
  3. 关于【QQ空间魔力日志】的说明
  4. OneDrive卸载后,无法重新安装OneDrive的问题(已解决)
  5. 刚发布!美国今年要砸8.5亿美元布局AI,这两件事,程序员一定做准备了!
  6. matlab抽样判决器,QPSK解调抽样判决报错
  7. 傅里叶变换家族的关系
  8. ASM学习笔记2 - 类的创建和修改 —— ClassWriter的综合应用
  9. 例3.2 计算存款利息。有1000元,想存一年。有3种方法可选:。。。
  10. C中野指针、空指针、万能指针问题