原文地址:http://liangjiabin.com/blog/2015/04/leetcode-best-time-to-buy-and-sell-stock.html

Best Time to Buy and Sell Stock I

题意:用一个数组表示股票每天的价格,数组的第i个数表示股票在第i天的价格。 如果只允许进行一次交易,也就是说只允许买一支股票并卖掉,求最大的收益。

分析:动态规划法。从前向后遍历数组,记录当前出现过的最低价格,作为买入价格,并计算以当天价格出售的收益,作为可能的最大收益,整个遍历过程中,出现过的最大收益就是所求。

代码:时间O(n),空间O(1)。

点击查看代码

Best Time to Buy and Sell Stock II

题目:用一个数组表示股票每天的价格,数组的第i个数表示股票在第i天的价格。交易次数不限,但一次只能交易一支股票,也就是说手上最多只能持有一支股票,求最大收益。

分析:贪心法。从前向后遍历数组,只要当天的价格高于前一天的价格,就算入收益。

代码:时间O(n),空间O(1)。

点击查看代码

Best Time to Buy and Sell Stock III

题意:用一个数组表示股票每天的价格,数组的第i个数表示股票在第i天的价格。最多交易两次,手上最多只能持有一支股票,求最大收益。

分析:动态规划法。以第i天为分界线,计算第i天之前进行一次交易的最大收益preProfit[i],和第i天之后进行一次交易的最大收益postProfit[i],最后遍历一遍,max{preProfit[i] + postProfit[i]} (0≤i≤n-1)就是最大收益。第i天之前和第i天之后进行一次的最大收益求法同Best Time to Buy and Sell Stock I。

代码:时间O(n),空间O(n)。

点击查看代码

Best Time to Buy and Sell Stock IV

题意:用一个数组表示股票每天的价格,数组的第i个数表示股票在第i天的价格。最多交易k次,手上最多只能持有一支股票,求最大收益。

分析:特殊动态规划法。传统的动态规划我们会这样想,到第i天时进行j次交易的最大收益,要么等于到第i-1天时进行j次交易的最大收益(第i天价格低于第i-1天的价格),要么等于到第i-1天时进行j-1次交易,然后第i天进行一次交易(第i天价格高于第i-1天价格时)。于是得到动规方程如下(其中diff = prices[i] – prices[i – 1]):

profit[i][j] = max(profit[i – 1][j], profit[i – 1][j – 1] + diff)

看起来很有道理,但其实不对,为什么不对呢?因为diff是第i天和第i-1天的差额收益,如果第i-1天当天本身也有交易呢,那么这两次交易就可以合为一次交易,这样profit[i – 1][j – 1] + diff实际上只进行了j-1次交易,而不是最多可以的j次,这样得到的最大收益就小了。

那么怎样计算第i天进行交易的情况的最大收益,才会避免少计算一次交易呢?我们用一个局部最优解和全局最有解表示到第i天进行j次的收益,这就是该动态规划的特殊之处。

用local[i][j]表示到达第i天时,最多进行j次交易的局部最优解;用global[i][j]表示到达第i天时,最多进行j次的全局最优解。它们二者的关系如下(其中diff = prices[i] – prices[i – 1]):

local[i][j] = max(global[i – 1][j – 1] + max(diff, 0), local[i – 1][j] + diff) 
global[i][j] = max(global[i – 1][j], local[i][j])

其中的local[i – 1][j] + diff就是为了避免第i天交易和第i-1天交易合并成一次交易而少一次交易收益。 参考:http://www.cnblogs.com/grandyang/p/4295761.html

代码:时间O(n),空间O(k)。

点击查看代码:http://liangjiabin.com/blog/2015/04/leetcode-best-time-to-buy-and-sell-stock.html

【LeetCode】 Best Time to Buy and Sell Stock I II III IV 解题报告相关推荐

  1. Best Time to Buy and Sell Stock I II III IV (第四周 动态规划)

    Best Time to Buy and Sell Stock I II III IV (第四周 动态规划) Best Time to Buy and Sell Stock I Say you hav ...

  2. [leetcode]_Best Time to Buy and Sell Stock I II

    一个系列三道题,我都不会做,google之答案.过了两道,第三道看不懂,放置,稍后继续. 一.Best Time to Buy and Sell Stock I 题目:一个数组表示一支股票的价格变换. ...

  3. 【leetcode】best time to buy and sell stocks(i, ii, iii, iv, v)

    i.只允许一次交易 思路:从前向后遍历数组,记录当前出现过的最低价格,作为买入价格,并计算以当天价格出售的收益,作为可能的最大收益,整个遍历过程中,出现过的最大收益就是所求. class Soluti ...

  4. leetcode: Best Time to Buy and Sell Stock 系列

    leetcode: Best Time to Buy and Sell Stock 系列 一系列包括: - Best Time to Buy and Sell Stock Ⅰ - Best Time ...

  5. Leetcode Best Time to Buy and Sell Stock III

    Leetcode Best Time to Buy and Sell Stock III,本算法的关键为找出其动态子结构.可以发现,序列中的最小值可以做为其的一个分割,令左边序列为left,右边的序列 ...

  6. Leetcode Best Time to Buy and Sell Stock

    Leetcode Best Time to Buy and Sell Stock 相关代码,本题使用dp算法完成,本算应该算得上一个经典的dp算法题. #include <iostream> ...

  7. LeetCode Best Time to Buy and Sell Stock II

    原题链接在这里:https://leetcode.com/problems/best-time-to-buy-and-sell-stock-ii/ 题目: Say you have an array ...

  8. [LeetCode] Best Time to Buy and Sell Stock 买卖股票的最佳时间

    Say you have an array for which the ith element is the price of a given stock on day i. If you were ...

  9. LeetCode Best Time to Buy and Sell Stock(dp)

    Say you have an array for which the ith element is the price of a given stock on day i. If you were ...

最新文章

  1. 550 万华人在美人才现状:7 诺奖、300 院士,320 八大常春藤高校终身正教授......
  2. 第十六届智能车竞赛线上比赛赛道审核 - 东北赛区第二批次
  3. ios俩个APP之间跳转、传值
  4. php cdi_本机CDI限定词:@Any和@Default
  5. android 脚本录制工具,[atx 系列] android 脚本录制
  6. mysql yog中文版下载_SQLyog 12
  7. 如何启动一个新的cmd窗口并在其内执行命令
  8. Spring中EmptyResultDataAccessException异常产生的原理及处理方法
  9. 七年!未来数据库的拐点已至
  10. linux设置自动关机命令,Linux中Shutdown命令实现定时自动关机
  11. sap abap开发从入门到精通_云端的ABAP Restful服务开发
  12. 百度地图转换高德地图经纬度问题在线转换工具
  13. 2/3维向量叉乘意义判断二维平面点的相对位置向量法证明海伦公式
  14. SQL Server 去除节假日天数,获取实际工作日天数
  15. 使用思维导图提高工作效率的秘诀:6种工作思维导图模板分享
  16. linux下国产达梦数据库的命令行安装
  17. win10计算机用户怎么删除,Win10系统怎么管理的家庭成员账户? Win10删除账户的教程...
  18. SELECT @@IDENTITY 中的@@是什么意思,如何应用?
  19. nginx的access.log文件详解
  20. 信号与系统sa函数求积分_信号与系统_第三章_学习心得

热门文章

  1. python查找文件并重命名_python实现遍历文件夹图片并重命名
  2. 阿里十年经验等于零!
  3. 特朗普近百条推文,被 Twitter 标记为「不实消息」
  4. idea 注册码 实测可用
  5. tomcat热部署 更改类文件不需要重起
  6. 使用计算机眼睛保护方法,电脑工作者保护眼睛的22个方法
  7. 799元!乐视智能门锁新品Le1S发布
  8. 微信公布10月朋友圈十大谣言 包括牙膏能杀灭幽门螺杆菌等
  9. 这就是即将发布的苹果刘海屏MacBook Pro样机?
  10. 从「及格线」到优等生,威马只用一台W6