以下所有题目的具体代码都在本专栏中,可以查看

121. 买卖股票的最佳时机 :给定一个数组 prices ,它的第 i 个元素 prices[i] 表示一支给定股票第 i 天的价格。

你只能选择 某一天 买入这只股票,并选择在 未来的某一个不同的日子 卖出该股票。设计一个算法来计算你所能获取的最大利润。

返回你可以从这笔交易中获取的最大利润。如果你不能获取任何利润,返回 0 。

只买卖一次

定义两个状态,

买:今日买,或之前已买 :dp[i][0]=Math.max(dp[i-1][0],-p[i])

卖: 今日卖,或之前已卖: dp[i][1]=Math.max(dp[i-1][0]+p[i],dp[i-1][1])

需要初始化第0天的买入和卖出的情况

122,买卖股票的最佳时机II  :可以多次买卖

定义两个状态,

买:今日买(前一天已经卖出),或之前已买 :dp[i][0]=Math.max(dp[i-1][0],dp[i-1][1]-p[i])

卖: 今日卖(前一天已经买入),或之前已卖: dp[i][1]=Math.max(dp[i-1][0]+p[i],dp[i-1][1])

需要初始化第0天的买入和卖出的情况

123,买卖股票的最佳时机III :最多可以完成两笔交易。

定义五个状态:

无操作:dp[i][0]=dp[i-1][0]

第一次买入:dp[i][1]=max(-p[i],dp[i-1][1])

第一次卖出:dp[i][2]=max(dp[i-1][1]+p[i],dp[i-1][2])

第二次买入:dp[i][3]=max(dp[i-1][2]-p[i],dp[i-1][3])

第二次卖出:dp[i][4]=max(dp[i-1][3]+p[i],dp[i-1][4])

初始化第0天的买入金额

dp[0][1]=-p[0]

dp[0][3]=-p[0]

返回最后一天的状态4

188买卖股票的最佳时机IV :最多可以完成 k 笔交易。

·  0 表示不操作

·  1 第一次买入

·  2 第一次卖出

·  3 第二次买入

·  4 第二次卖出 。。。。。

所以状态j的数量为 2*k+1

第二次买入:dp[i][3]=max(dp[i-1][2]-p[i],dp[i-1][3])

第二次卖出:dp[i][4]=max(dp[i-1][3]+p[i],dp[i-1][4])

参照上一题的思路:定义两个状态:dp[i][j]

状态j为奇数表示买入,j为偶数表示卖出  (j<2*k;每次递增+2)

买入:dp[i][j+1]=max(dp[i-1][j]-p[i],dp[i-1][j+1])

卖出:dp[i][j+2]=max(dp[i-1][j+1]+p[i],dp[i-1][j+2])

初始化:第0天,k次买入 :  for(let i=1;i<2*k;i+=2)

309.最佳买卖股票时机含冷冻期 :给定一个整数数组,其中第 i 个元素代表了第 i 天的股票价格 。

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

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

定义四个状态:

0:买入 (之前已经买入,今天买入(前一天不是冷冻期,或者前一天是冷冻期))

dp[i][0]=max(dp[i-1][0],dp[i-1][1]-p[i],dp[i-1][3]-p[i])

1:保持卖出(前一天不是冷冻期,或者前一天是冷冻期)

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

  1. 卖出(今天卖出(之前已经买入))

Dp[i][2]=dp[i-1][0]+p[i]

  1. 冷冻期(前一天卖出)

Dp[i][3]=dp[i-1][2]

714.买卖股票的最佳时机含手续费 :给定一个整数数组 prices,其中第 i 个元素代表了第 i 天的股票价格 ;非负整数 fee 代表了交易股票的手续费用。

你可以无限次地完成交易,但是你每笔交易都需要付手续费。如果你已经购买了一个股票,在卖出它之前你就不能再继续购买股票了。

返回获得利润的最大值

定义两个状态:

0持有:之前持有,或今天买入

Dp[i][0]=max(dp[i-1][0],dp[i-1][1]-p[i])

1不持有:之前不持有,今天卖出

Dp[i][1]=max(dp[i-1][1],dp[i-1][0]+p[i]-fee)

需要注意p的长度为0,1,2的情况

力扣买卖股票系列总结相关推荐

  1. 力扣 买卖股票的最佳时机II

    力扣 买卖股票的最佳时机II 题目描述 给定一个数组,它的第 i 个元素是一支给定股票第 i 天的价格. 设计一个算法来计算你所能获取的最大利润.你可以尽可能地完成更多的交易(多次买卖一支股票). 注 ...

  2. leetcode 买卖股票系列题目总结

    总结:买卖股票系列题目 1.买卖股票的最佳时机(简单) 121. 买卖股票的最佳时机 难度简单1093 给定一个数组,它的第 i 个元素是一支给定股票第 i 天的价格. 如果你最多只允许完成一笔交易( ...

  3. 【leetcode买卖股票系列问题】多次买卖/手续费/冻结期

    一.目录 一.目录 二.股票系列问题 1.买卖股票的最佳时机(121题) 1.1.题目 1.2.思路 1.3.代码实现(1种) 2.买卖股票的最佳时机II(122题) 2.1.题目 2.2.思路 2. ...

  4. leetcode力扣刷题系列python——2、两数相加

    题目: 给出两个 非空 的链表用来表示两个非负的整数.其中,它们各自的位数是按照 逆序 的方式存储的,并且它们的每个节点只能存储 一位 数字. 如果,我们将这两个数相加起来,则会返回一个新的链表来表示 ...

  5. 【动态规划】买卖股票

    买卖股票系列 121.买卖股票的最佳时机 122. 买卖股票的最佳时机 II 123. 买卖股票的最佳时机 III 188. 买卖股票的最佳时机 IV 309. 最佳买卖股票时机含冷冻期 121.买卖 ...

  6. LintCode 买卖股票的最佳时机I II III IV

    今天我做了LintCode上的买卖股票系列题目.总共4道题目,主要使用了动态规划的方法,在此写出我的代码和思路以便交流和回顾. 1.假设有一个数组,它的第i个元素是一支给定的股票在第i天的价格.如果你 ...

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

    买卖股票系列: [必备算法]动态规划:一个思路解决六道股票问题 [必备算法]动态规划:LeetCode题(七)121. 买卖股票的最佳时机,122. 买卖股票的最佳时机 II [必备算法]动态规划:L ...

  8. 《LeetCode力扣练习》第121题 买卖股票的最佳时机 Java

    <LeetCode力扣练习>第121题 买卖股票的最佳时机 Java 一.资源 题目: 给定一个数组 prices ,它的第 i 个元素 prices[i] 表示一支给定股票第 i 天的价 ...

  9. 力扣:121. 买卖股票的最佳时机 题解

    力扣:121. 买卖股票的最佳时机 1 题目描述 2 题解 1 题目描述 给定一个数组 prices ,它的第 i 个元素 prices[i] 表示一支给定股票第 i 天的价格. 你只能选择 某一天 ...

最新文章

  1. hdu 1272 小希的迷宫
  2. 【亲测】在网页上查找接口,Network--XHR,出来的每个Name都是后台的一个接口
  3. C语言 enum和typedef enum的区别
  4. Ribbon-2通过代码自定义配置ribbon
  5. linux gcc延时怎么写,Clang / GCC是否真的支持延迟加载功能?
  6. Win7系统关闭兼容性选项的方法
  7. retrofit2 发送json数据_使用浏览器发送post请求
  8. 三维重建笔记——Linux环境下openMVG的安装
  9. r语言转python,R语言与python语言读写loom文件
  10. Java工具集-数学(圆柱体,椎体工具类)
  11. 使用python来完成数据的线性拟合
  12. php的console.log,console.log()的作用
  13. QT C++ Luhn算法验证银行卡号合法性
  14. 关于RGV下料的智能动态调度
  15. android 模拟自动点击,自动点击器(模拟点击)
  16. 云原生爱好者周刊:Grafana Loki 免费电子书
  17. H5 Canvas实现荣誉证书生成器
  18. 宝藏级的开源小程序(APP)商城-CRMEB-WEB版实测
  19. 面试必问问题最佳答案
  20. 从零开始速通百度云网盘

热门文章

  1. c# 从一组数中随机抽取一定个数_C#产生指定范围随机数的几种方法-亮术网
  2. matlab高级数据结构,Matlab讲义-第四章Matlab语言数据结构1-10.pdf
  3. ApplicationId 与 PackageName
  4. anconda设置镜像源_管理2000+Docker镜像,Kolla是如何做到的
  5. Jsp+Servlet+Mysql实现的二手物品在线商城源码
  6. 基于JAVA+SpringMVC+MYSQL的勤工助学管理系统
  7. 基于JAVA+Servlet+JSP+MYSQL的毕业生离校管理系统
  8. 应用层协议:HTTPS
  9. LOOP AT GROUP语法熟悉
  10. Codeforces Round #456 (Div. 2)