您当前的位置: 首页 > 

CSDN 程序人生

暂无认证

  • 0浏览

    0关注

    1993博文

    0收益

  • 0浏览

    0点赞

    0打赏

    0留言

私信
关注
热门博文

漫画:程序教你玩转股票

CSDN 程序人生 发布时间:2020-10-27 11:55:18 ,浏览量:0

作者 | 小灰

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

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

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

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

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

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

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

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

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

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

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

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

第4步,遍历到第4个元素,由于4>2,所以当前的最小价格仍然是2;4-2=2,22,所以当前的最小价格仍然是2;3-2=1,1 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年,很可能是以太坊的“高光之年”
点分享点点赞点在看
关注
打赏
1614322772
查看更多评论
立即登录/注册

微信扫码登录

0.0422s