作者 | 小灰

来源 | 程序员小灰(ID:chengxuyuanxiaohui)

—————  第二天  —————

什么意思呢?让我们来举个例子,给定如下数组:

该数组对应的股票涨跌曲线如下:

显然,从第2天价格为1的时候买入,从第5天价格为8的时候卖出,可以获得最大收益:

此时的最大收益是 8-1=7。

在上面这个例子中,最大值9在最小值1的前面,我们又该怎么交易?总不能让时间倒流吧?

————————————

以下图为例,假如我们已经确定价格4的时候为卖出时间点,那么此时最佳的买入时间点是哪一个呢?

我们要选择价格4之前的区间,且必须是区间内最小值,显然,这个最佳的选择是价格2的时间点。

第1步,初始化操作,把数组的第1个元素当做临时的最小价格;最大收益的初始值是0:

第2步,遍历到第2个元素,由于2<9,所以当前的最小价格变成了2;此时没有必要计算差值的必要(因为前面的元素比它大),当前的最大收益仍然是0:

第3步,遍历到第3个元素,由于7>2,所以当前的最小价格仍然是2;如我们刚才所讲,假设价格7为卖出点,对应的最佳买入点是价格2,两者差值7-2=5,5>0,所以当前的最大收益变成了5:

第4步,遍历到第4个元素,由于4>2,所以当前的最小价格仍然是2;4-2=2,2<5,所以当前的最大收益仍然是5:

第5步,遍历到第5个元素,由于3>2,所以当前的最小价格仍然是2;3-2=1,1<5,所以当前的最大收益仍然是5:

以此类推,我们一直遍历到数组末尾,此时的最小价格是1;最大收益是8-1=7:

public class StockProfit {public static int maxProfitFor1Time(int prices[]) {        if(prices==null || prices.length==0) {            return 0;        }        int minPrice = prices[0];        int maxProfit = 0;        for (int i = 1; i < prices.length; i++) {            if (prices[i] < minPrice) {                minPrice = prices[i];            } else if(prices[i] - minPrice > maxProfit){                maxProfit = prices[i] - minPrice;            }        }        return maxProfit;    }public static void main(String[] args) {        int[] prices = {9,2,7,4,3,1,8,4};        System.out.println(maxProfitFor1Time(prices));    }
}

我们以下图这个数组为例,直观地看一下买入卖出的时机:

在图中,绿色的线段代表价格上涨的阶段。既然买卖次数不限,那么我们完全可以在每一次低点都进行买入,在每一次高点都进行卖出。

这样一来,所有绿色的部分都是我们的收益,最大总收益就是这些局部收益的加总:

(6-1)+(8-3)+(4-2)+(7-4) = 15

至于如何判断出这些绿色上涨阶段呢?很简单,我们遍历整个数组,但凡后一个元素大于前一个元素,就代表股价处于上涨阶段。

    public int maxProfitForAnyTime(int[] prices) {        int maxProfit = 0;        for (int i = 1; i < prices.length; i++) {            if (prices[i] > prices[i-1])                maxProfit += prices[i] - prices[i-1];        }        return maxProfit;    }

更多精彩推荐
☞最新!百度首发 OCR 自训练平台 EasyDL OCR
☞如何成为一名求伯君式的黑客
☞字节跳动回应抖音上市;苹果公司:全球多个国家的 App 价格将上涨;GDB 10.1 发布|极客头条
☞11.11大促来袭,京东如何保障云安全?
☞SQL分页查询方案的性能对比
☞2021年,很可能是以太坊的“高光之年”
点分享点点赞点在看

漫画:程序教你玩转股票相关推荐

  1. 手把手教你玩转SOCKET模型之重叠I/O篇(下)

    http://blog.csdn.net/PiggyXP/archive/2004/09/23/114908.aspx 四.     实现重叠模型的步骤 作了这么多的准备工作,费了这么多的笔墨,我们终 ...

  2. 手把手教你玩转SOCKET模型:完成例程(Completion Routine)篇

    本文假设你已经对重叠I/O的机制已有了解,否则请先参考本系列的前一篇<手把手教你玩转SOCKET模型之重叠I/O篇>: 目录: 1.完成例程的优点 2.完成例程的基本原理 3.关于完成例程 ...

  3. 手把手教你玩转SOCKET模型:完成端口(Completion Port)详解

    这篇文档我非常详细并且图文并茂的介绍了关于网络编程模型中完成端口的方方面面的信息,从API的用法到使用的步骤,从完成端口的实现机理到实际使用的注意事项,都有所涉及,并且为了让朋友们更直观的体会完成端口 ...

  4. 手把手教你玩转网络编程模型之完成例程(Completion Routine)

    前  言 记得写这个系列的上一篇文章的时候已经是四年前了,准确的说是四年半以前了,翻开我尘封已久的IO模型里面的"完成例程"的实现方式及示例代码. 本文凝聚着笔者心血,如要转载,请 ...

  5. 64位系统目录在那里_教你玩转Linux系统目录结构

    Linux 内核最初只是由芬兰人林纳斯·托瓦兹(Linus Torvalds)在赫尔辛基大学上学时出于个人爱好而编写的.Linux 是一套免费使用和自由传播的类 Unix 操作系统,是一个基于 POS ...

  6. 手把手教你玩转网络编程模型之完成例程(Completion Routine)篇(下)-转

    续 手把手教你玩转网络编程模型之完成例程(Completion Routine)篇(上) 四.         完成例程的实现步骤 基础知识方面需要知道的就是这么多,下面我们配合代码,来一步步的讲解如 ...

  7. 教ai玩游戏_简单解释:DeepMind如何教AI玩视频游戏

    教ai玩游戏 by Aman Agarwal 通过阿曼·阿加瓦尔(Aman Agarwal) 简单解释:DeepMind如何教AI玩视频游戏 (Explained Simply: How DeepMi ...

  8. 色色教你玩魔方(傻瓜式全程图解教学)

    色色教你玩魔方(傻瓜式全程图解教学) 高中时候是我学校的魔方高手,六面魔方对我们来讲不是什么神奇的事,需要讲究的那是速度,我高中时的最快速度是6面需要1分多钟,为此,我骄傲得很呢!~~不过有10年不摸 ...

  9. android 自动化 微信,C#手把手教你玩微信自动化

    原标题:C#手把手教你玩微信自动化 转自:初久的私房菜 cnblogs.com/MrChuJiu/p/13959383.html 介绍 本文主要讲的内容是 C# + Appium 自动化玩微信. Ap ...

最新文章

  1. 科研人员多维度测试GPT-3发现:它并不是一名“好学生”
  2. IDC预测2022年全球智能家居连接设备市场规模将达10亿台!
  3. matplotlib 标签_Python可视化matplotlibamp;seborn14热图heatmap
  4. Java设计模式之结构型:组合模式
  5. 《精通J2EE网络编程》中讲的JNDI 6.1 什么是JNDI
  6. dart系列之:在dart中使用生成器
  7. ANSYS——杆单元简介与示例(含新版本2019版本杆实常数设置、ANSYS help的使用、单元列表使用的举例)
  8. Lukas-Kanade光流法
  9. 新农大计算机学院照片,【新生指南】小团带你逛校园(内附农大全景图~)
  10. 金融数据分析与挖掘实战练习-1.9
  11. 试述计算机控制系统的大致组成,试述工业计算机控制系统的组成及应用
  12. c语言程序设计学习中的问题与对策,C语言程序设计学习中的问题与对策.pdf
  13. java宝马奔驰汽车正在生产代码_Java的三种工厂模式
  14. [独家]MIT课程笔记:数据可视化会撒谎
  15. linux命令显示文件内容行号|linux将内容以行号显示出来
  16. 色彩心理学:为什么快餐店不适合等人?
  17. 髂嵴最高点在哪里_两侧髂嵴最高点连线约平 ( )
  18. CLOSE关闭连接的各种情况
  19. 3120TL条码打印机驱动安装指导
  20. 用计算机寻找规律,用计算器找规律练习题

热门文章

  1. php日期时间戳相互转换,PHP时间戳和日期相互转换
  2. markdown语法中的空格_Markdown常用语法汇总
  3. SAP QM启用了Physical Sample Management后检验批有哪些特殊地方?
  4. SAP MM ME1P查询采购订购订单价格历史
  5. 5分钟掌握手动优化机器学习模型超参数
  6. AI制药来了!新药研发或告别“十年磨一剑”
  7. 超过AttGAN,谷歌推出生成文本到图像的新框架 TReCS
  8. 在时间关系数据上AutoML:一个新的前沿
  9. 2019 快过去了,自动驾驶发展得怎么样了?
  10. 为基于树的机器学习模型构建更好的建模数据集的10个小技巧!