zoukankan      html  css  js  c++  java
  • 回到昨天,你能够从股市赚到最多的钱么?

    Q:假设你可以回到昨天,并且得到股市昨天的全天每个时刻的数据,你能够通过买卖交易,赚取最多的钱么?

    比如:

    1. {10, 20, 15, 18, 22, 20, 4, 5}

    {买入  卖出}

    {10, 20} {15, 22} {4, 5} 一共三次交易,赚了 10 + 7 + 1 = 18块钱

    2. {5, 10, 9, 10, 11, 11, 12, 100}

    {5, 10} {9, 100} 两次交易,赚了 5 + 91 = 96,是最多的钱。

    条件:

    1. 不计手续费

    2. 一次买+卖算一次完整交易

    3. 买入后,在卖出前,不能再买入(意思是,交易不能交叉)

    问题:

    1. 如果没有其它限制,只让你尽可能多的赚钱,怎么写算法?

    2. 扩展问题, 如果规定了,最多只允许交易 N 次,如何买入/卖出,赚最多的钱?

    答:

    1. 这个比较简单,就好像我的举例一样。直接扫描整个数组,递增就继续扫描,碰到 a[i] < a[i - 1],则将前面的卖掉,然后重新开始买入。以此类推

    2. 但这个扩展就比较麻烦了,最多只允许交易N次。

    比如例子1中,需要通过三次交易才能够达到收益最大化,但如果N=2,只允许最多交易两次,如何最大化收益呢?算法如何写?

    我有个想法,先按问题1中,算出一共交易多少次,能够收益最大。再对这些交易的收益排序(倒序),选收益最多的N个交易,不知道这样行不行?(但总觉得这样可能有问题)

  • 相关阅读:
    chmod命令
    ls命令
    数组值去重-小技巧
    使用redis接管session
    使用redis接管cookie
    redis操作封装类
    HTTP协议详解
    Linux网络编程--多播
    Live555 分析(三):客服端
    Live555 分析(二):服务端
  • 原文地址:https://www.cnblogs.com/yayagamer/p/2876687.html
Copyright © 2011-2022 走看看