题目:

风口之下,猪都能飞。当今中国股市牛市,真可谓“错过等七年”。 给你一个回顾历史的机会,已知一支股票连续n天的价格走势,以长度为n的整数数组表示,数组中第i个元素(prices[i])代表该股票第i天的股价。 假设你一开始没有股票,但有至多两次买入1股而后卖出1股的机会,并且买入前一定要先保证手上没有股票。若两次交易机会都放弃,收益为0。 设计算法,计算你能获得的最大收益。 输入数值范围:2<=n<=100,0<=prices[i]<=100

输入例子:

3,8,5,1,7,8

输出例子:

12

思路:

1、动态规划

i表示第i天,k表示第k次交易

  • 状态转移方程:

    • pmax = max{ f(j,k-1)+prices[i]-prices[j] } (0<=j<i)}
    • f(i,k) = max{ f(i-1,k), pmax}
    • 即f(i,k ) = max{  f(i-1,k) ,  max { f(j,k-1) + prices[i]-prices[j]  |  0<=j<i } }
  • f(i-1,k)表示第i天不交易
  • max{ f(j,k-1)+prices[i]-prices[j] } (0<=j<i)}表示第i天卖,而这次交易的买应该来自第j天,f(j,k-1) +prices[i] - prices[j] ,0<=j<i ,取最大值。
  • max{ f(j,k-1)+prices[i]-prices[j] } (0<=j<i)},这一步可以通过单调队列来优化,可以参考一下:http://www.cnblogs.com/ka200812/archive/2012/07/11/2585950.html,简单的来说,就是将方程中包含j的部分单独拿出来处理,即max(f(j,k-1)-prices[j])

2、前缀、后缀数组

通过前缀数组A来计算0次或1次交易的最大收益;

通过后缀数组B来计算0次或1次交易的最大收益;

通过遍历0-n,计算max(A[i]+B[i])即为最大收益;

代码:

1、简单的动态规划

class Solution {
public:/*** 计算你能获得的最大收益* * @param prices Prices[i]即第i天的股价* @return 整型*/int kTransaction(vector<int> prices,int k){int n=prices.size();vector<vector<int> > dp(n,vector<int>(k+1,0));int mx;for(int i=1;i<n;i++){for(int t=1;t<=k;t++){mx=dp[i-1][t];for(int j=i-1;j>=0;j--)mx=max(mx,dp[j][t-1]+prices[i]-prices[j]);dp[i][t]=mx;}}return dp[n-1][k];}int calculateMax(vector<int> prices) {return kTransaction(prices,2);}
};

2、单调队列优化的动态规划

class Solution {
public:/*** 计算你能获得的最大收益* * @param prices Prices[i]即第i天的股价* @return 整型*/int kTransaction(vector<int> prices,int k){int n=prices.size();vector<vector<int> > dp(n,vector<int>(k+1,0));vector<int> pMax(k+1,0);int mx;for(int i=0;i<=k;i++)pMax[i]=-prices[0];for(int i=1;i<n;i++){pMax[0]=max(pMax[0],dp[i][0]-prices[0]);for(int t=1;t<=k;t++){mx=dp[i-1][t];mx=max(mx,pMax[t-1]+prices[i]);pMax[t-1]=max(pMax[t-1],dp[i][t-1]-prices[i]);dp[i][t]=mx;}}return dp[n-1][k];}int calculateMax(vector<int> prices) {return kTransaction(prices,2);}
};

3、前缀后缀数组

class Solution {
public:/*** 计算你能获得的最大收益* * @param prices Prices[i]即第i天的股价* @return 整型*/int calculateMax(vector<int> prices) {int n=prices.size();vector<int> leftMax(n);vector<int> rightMax(n);int lmin=prices[0];leftMax[0]=0;for(int i=0;i<n;i++){lmin=min(lmin,prices[i]);leftMax[i]=max(leftMax[i-1],prices[i]-lmin);}int rmax=prices[n-1];rightMax[n-1]=0;for(int i=n-2;i>=0;i--){rmax=max(rmax,prices[i]);rightMax[i]=max(rightMax[i+1],rmax-prices[i]);}int pmax=0;for(int i=0;i<n;i++)pmax=max(pmax,leftMax[i]+rightMax[i]);return pmax;}
};

 

转载于:https://www.cnblogs.com/AndyJee/p/4478159.html

(笔试题)风口的猪-中国牛市相关推荐

  1. 小米实习生笔试题风口的猪-中国牛市Java代码

    本文地址:http://blog.csdn.net/shanglianlm/article/details/77839691 题目描述 风口之下,猪都能飞.当今中国股市牛市,真可谓"错过等七 ...

  2. 邮政社招笔试题库_2016年中国邮政储蓄银行招聘考试笔试题库内容试卷历年真题...

    邮政银行招聘考试笔试复习资料 历年考试真题 建议报考的同学提前做好复习准备 ,考试复习资料可以到"考佳卜资料网" 上面找找, 资料确实不错, 比较有针对性, 资料都是上次参加考试的 ...

  3. 邮政社招笔试题库_历年中国邮政笔试精华试题及参考答案

    历年中国邮政笔试精华试题及参考答案 您需要登录后才可以回帖 登录 | 注册 发布 一.单项选择题 ( 共 60 题,每题 1 分.每题的备选项中,只有 1 个最符合题意 ) 1. 作为社会经济的有机组 ...

  4. 【软件测试笔试题】阿里巴巴(中国)网络技术有限公司

    小编热衷于收集整理资源,记录踩坑到爬坑的过程.希望能把自己所学,实际工作中使用的技术.学习方法.心得及踩过的一些坑,记录下来.也希望想做软件测试的你一样,通过我的分享可以少走一些弯路,可以形成一套自己 ...

  5. 邮政社招笔试题库_工商银行招聘考试题库13套和参考答案

    目录: 1. xx工商银行招聘面试题(笔试真题) 2. 中国工商银行xx分行招聘笔试题无答案(行测部分) 3. 中国工商银行客户经理招聘笔试题和答案 4. 中国工商银行总行校园招聘笔试题和参考答案(行 ...

  6. 邮储社招Java笔试题_2019年及历年中国邮政储蓄银行社招笔试题和参考答案6套

    2019年及历年中国邮政储蓄银行社招笔试题和参考答案6套 目录: 1.2016年中国邮政储蓄银行社会招聘笔试题和参考答案 2.2019年5月中国邮政储蓄银行社会招聘笔试题和参考答案 3.2019年中国 ...

  7. 平安外包软件测试面试题,中国平安银行软件测试笔试题 .doc

    中国平安银行软件测试笔试题 .doc 中国平安银行软件测试笔试题 导语:下面小编为你整理为了中国平安银行关于软件 测试笔试试题,欢迎阅读! 中国平安银行关于软件测试笔试试题(一) 下面是一平安银行的软 ...

  8. 中国邮政储蓄银行计算机招聘,2019年及历年中国邮政储蓄银行计算机招聘笔试题和参考答案4套...

    目录: 1. 2017年10月中国邮政储蓄银行计算机类招聘笔试题和参考答案 2. 2019年8月中国邮政储蓄银行xx分行软件研发类招聘笔试题和参考答案 3. 2019年中国邮政储蓄银行总行信息科技岗招 ...

  9. 90 个名企笔试题和算法题

    名企笔试 名企笔试:美团2016招聘笔试(股票交易日) 名企笔试:搜狐2016招聘笔试题(扎金花) 名企笔试:凤凰网2015招聘(二分查找) 名企笔试:4399游戏校招笔试题(快速排序) 名企笔试:蘑 ...

  10. 搬:90 个名企笔试题和算法题

    名企笔试 名企笔试:美团2016招聘笔试(股票交易日) 名企笔试:搜狐2016招聘笔试题(扎金花) 名企笔试:凤凰网2015招聘(二分查找) 名企笔试:4399游戏校招笔试题(快速排序) 名企笔试:蘑 ...

最新文章

  1. NoSQL 非关系数据库
  2. 大数据的说法 正确的是_前端测试题:(解析)用于播放音频文件的正确HTML5元素是?...
  3. spring配置数据源错误记录
  4. 解决算法问题的思路总结
  5. android 长时间 build,Gradle(Android Studio)构build时间非常长
  6. 容易忘记的linux命令之rpm
  7. google国内镜像网址收集
  8. 知乎推荐育儿书籍汇总
  9. VC之获取计算机网卡mac地址
  10. 计算机无法安装cad怎么办,电脑安装AutoCAD提示未正常卸载无法安装如何解决
  11. matlab liccode,有没有哪位大佬能帮忙解决以下两个错误:liccode=cha
  12. 华为服务器怎么查看系统日志,云服务器怎么查看系统日志
  13. FA_MASS_ADDITIONS Interface Table 资产成批增加
  14. “文件大小”和“占用空间”的区别
  15. t3安装找不到主机服务器,T3标准版不能连接服务器的处理方法
  16. 红警职教智能硬件电子电路基础版教材与配套视频资源即将开发完毕
  17. html 纵向滚动条,css设置纵向滚动条
  18. 大型游戏后台实践浅谈
  19. Cannot unpack file C:\Users\ADMINI~1\AppData\Local\Temp\pip-ilsapnxq-unpack\simple.htm
  20. Hadoop 运行wordcount任务卡在job running的一种解决办法

热门文章

  1. Unity3D 2D设计小游戏移动幻影的实现
  2. html前端简单页面,web前端制作一个简单的登录页面
  3. 往届毕业生档案去向查询网_大学毕业档案怎么处理 毕业生档案去向查询
  4. Angular入门到精通系列教程(14)- Angular 编译打包 Docker发布
  5. win10+Ubuntu双系统下如何完美卸载Ubuntu系统
  6. javascript 域名合法性检测
  7. swoole 连接池php fpm,【转】swoole4实现数据库连接池
  8. 定义一个鸭子的类java_鸭子类型:一切都是为了复用
  9. 如何在github上创建自己的个人网站
  10. onenote怎么同步到电脑_OneNote 同步最佳做法