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

输入例子:
3,8,5,1,7,8
输出例子:
12

解析:动态规划思路,有0次,1次,2次机会操作股票,那么可以把数组以i为中间值分为前半段和后半段,0<=i<=n-1,dpl[i]表示从0到i-1天内的最大收益,dpr[i]表示从第i-1天到第n-1天内的最大收益,两者相加可求出总的最大收益

import java.sql.ResultSet;public class Main {public static void main(String[] args) {int[] array = new int[] { 3, 8, 5, 1, 7, 8 };calculateMax3(array);}public static int calculateMax(int[] p) {int[] dpl=new int[p.length];//dpl[i]为从0开始到i的所有天中能获得的最大的收益,可能是其中的一段时间int length=p.length;dpl[0]=0;int min=0;//min为从第min天开始买入到第i天获得的收益int resl=0;for(int i=1;i<length;i++){if(p[i]>p[i-1]){resl=Math.max(p[i]-p[min], resl);//比较值为历史新低到当前天的最大收益和前i天历史最大值dpl[i]=resl;//若第二天上涨,有可能该天到买入收益最大,也有可能是股票回升//若股票回升,则还是为前i天最大值,即前i天最大收益仍为第min天到第某天}else {//若第二天下跌,则看是否跌出谷底,//若没有跌出谷底,则仍为前i-1天最大收益//若跌出谷底则重新计算最小值,从该天算后面的收益dpl[i]=dpl[i-1];if(p[i]<p[min]){min=i;}}}int[] dpr=new int[length];dpr[length-1]=0;int resr=0;int max=length-1;for(int i=length-2;i>=0;i--){if(p[i]<p[i+1]){resr=Math.max(p[max]-p[i], resr);dpr[i]=resr;}else {dpr[i]=dpr[i+1];if(p[i]>p[max]){max=i;}}}int res =0;for(int i=0;i<length;i++){res=Math.max((dpl[i]+dpr[i]), res);}System.out.println(res);return res;}/*** 计算你能获得的最大收益** @param prices*            Prices[i]即第i天的股价* @return 整型*/public static int calculateMax2(int[] prices) {int firstBuy = Integer.MIN_VALUE, firstSell = 0;int secondBuy = Integer.MIN_VALUE, secondSell = 0;for (int curPrice : prices) {firstBuy = Math.max(firstBuy, -curPrice);firstSell = Math.max(firstSell, firstBuy + curPrice);secondBuy = Math.max(secondBuy, firstSell - curPrice);secondSell = Math.max(secondSell, secondBuy + curPrice);System.out.println("firstBuy: " + firstBuy + ", firstSell: "+ firstSell + ", secondBuy: " + secondBuy+ ", secondSell: " + secondSell);}return secondSell;}
       // 来自http://blog.csdn.net/li563868273/article/details/51073838public static int calculateMax3(int[] prices) {// 记录[0..i]之间的最大收益int[] dpl = new int[prices.length];// 记录[i...length-1]的最大收益int[] dpr = new int[prices.length];dpl[0] = 0;// 第一个肯定赋值为0int minI = 0;// 扫描一次左边System.out.print("dpl[0]=0, ");for (int i = 1; i < dpl.length; i++) {// 如果大于等于if (prices[i] > prices[i - 1]) {dpl[i] = Math.max(prices[i] - prices[minI], dpl[i - 1]);} else {dpl[i] = dpl[i - 1];if (prices[i] < prices[minI])minI = i;}System.out.print("dpl[" + i + "]=" + dpl[i] + ", ");}System.out.println();// 最后一个肯定赋值为0dpr[prices.length - 1] = 0;int maxI = prices.length - 1;System.out.print("dpr[" + (prices.length - 1) + "]=0, ");for (int i = prices.length - 2; i >= 0; i--) {// 从右到左扫描一遍填充dpr数组,和从左边扫描一样if (prices[i] < prices[i + 1]) {dpr[i] = Math.max(prices[maxI] - prices[i], dpr[i + 1]);} else {dpr[i] = dpr[i + 1];if (prices[i] > prices[maxI]) {maxI = i;}}System.out.print("dpr[" + i + "]=" + dpr[i] + ", ");}System.out.println();int res = 0;for (int i = 0; i < prices.length - 1; i++) { // 比较得出最大值res = Math.max(dpl[i] + dpr[i], res);System.out.println("dpl[" + i + "]=" + dpl[i] + ",dpr[" + i + "]="+ dpr[i] + ",res=" + res);}return res;}
}

风口上的猪-中国牛市相关推荐

  1. 开启猪年大运——风口上的猪

    西安天气 阴 -3~4 ℃ 猪年第一篇文章,原本在上周六就想好主题(开启猪年大运--风口上的猪),下午进入复习去年学习的内容,状态也非常好,可是由于来了一些事情耽误了.现在开始完成未完成的工作. 回归 ...

  2. 雷军说的:站在风口上,猪都能飞起来,这就是借势。程序员该如何借势改变35岁危机?

    作者:非著名程序员 前言 感兴趣的可以关注我的头条,Android进阶小刘 不定期更新Android热门知识学习视频哦! 大家好,我是你们的校长. 今天想跟大家聊一聊关于借势的话题.俗话说:**顺我者 ...

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

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

  4. 死在“风口上的猪”人工智能初创企业倒闭的原因分析

    虽然行业主流观点认为AI是个时代,不是风口,2017年大家还是深刻感受到风来了,浪也来了-- 互联网思维认为"猪站在风口上都会飞",然而AI创业创新者注定浪立潮头的一般是少数,拍死 ...

  5. 陆奇谈创业:风口上的猪一定要赶快长出翅膀,因为风停下来满地都是掉落的死猪...

    整理 | 阿司匹林.Just 出品 | AI科技大本营 创业很难,挑战很多,往往九死一生,但创业机会也很大,如何拥抱机会,面对挑战是创业者们关心的话题. 1 月 11 日,陆奇在上海交大文治堂与创业者 ...

  6. 浅谈程序员的英语学习 - 风口上的猪 - 博客园

    作为在中国工作的程序员,不懂得英语似乎也不妨碍找到好工作,升职加薪.但程序员这个工种则稍有不同,因为程序,尤其是高级语言,基本上都是由英语和数字表达式构成的.英语对于程序员十分重要.我的大学本科全部采 ...

  7. 车用半导体风口上的猪,各大巨头抢占布局

    自2012年以来,国际半导体界开始加速并购,在全球并购浪潮中,中国半导体并购在前两年也开始盛行.包括从存储器与储存到网路.处理器以及类比等领域.有行业人士认为,这是半导体产业进入成熟期的标志,随着行业 ...

  8. 《大数据》第1期“动态”——站在大数据的风口上

    站在大数据的风口上 Momentum of Big Data 每个人都渴望成功,而通向成功道路最重要的一条就是创新创业,创新创业的源泉是新的思想.最近,由中信出版集团出版.大数据战略重点实验室推出的一 ...

  9. 风口上的雷军和他的编程梦

    提起雷军,大家会想到什么?小米. 是的,是雷军成就了小米,同时,小米也成就了雷军. 其实,雷军的成功远不止小米一个,你知道中国第一家网购网站是什么?不是淘宝,是雷军的卓越!你知道中国第一个语音聊天ap ...

  10. 站在设计风口上,你也会飞

    编者注: 本文来自Medium,中文版由天地会珠海分舵进行编译.发文时该文在Medium上的"头条推荐"上排名第二位,可见其在国外同行中时备受推崇的.为了让国内的读者更容易阅读,译 ...

最新文章

  1. Openstack组件实现原理 — Keystone认证功能
  2. javascript 点点滴滴 jquery
  3. 阿里云视频云编码优化的思考与发现
  4. re 模块 分组特别说明
  5. jpa动态扩展sql_扩展您的JPA POJO
  6. 解释性语言和汇编性语言对比
  7. cron 每天下午5点_下午5点30:沅江新沅路与琼湖路交叉路口...
  8. opencv cvtColor dtype issue(error: (-215) )
  9. java窗口布局_Java窗口(JFrame)从零开始(4)——流布局+边界布局+网格布局
  10. y480 linux无线网卡驱动,联想y480无线网卡驱动
  11. 计算机网络技术超星尔雅章节检测,超星尔雅计算机网络技术第二章节测验答案...
  12. plotly系列 | 绘制散点图组合箱线图(联合图)
  13. 职业学校计算机课评课,中职计算机评课稿
  14. PS修改图片局部颜色
  15. 手机知识:手机OTG知识介绍,看完你就懂了
  16. 杭州好玩景点攻略200
  17. 国内运营商的Sim卡在日版iPhone上的使用方法(卡贴安装方法)
  18. 分布式elasticsearch7.3.1集群部署
  19. JavaWeb技术内幕四:Javac编译原理
  20. WMIC命令的利用技巧

热门文章

  1. 伺服电机驱动器编程用c语言吗,伺服电机如何编程
  2. win10/11: Windows Audio无法启动 错误 0x80070005:拒绝访问
  3. 专访:6位飞桨开发者的「新生代」AI创新故事!
  4. String 与 char* 相互转换
  5. 网络创业成功的7堂课(读书笔记)
  6. 消息队列之Kafka从入门到小牛
  7. JavaWEB-Servlet
  8. UnityShader实现漫反射光照模型和高光反射光照模型
  9. APK Multi-Tool强大的APK反编译工具终极教程
  10. 寒江独钓前辈的第一个例子的部分分析