回到昨天,你能够从股市赚到最多的钱么?

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个交易,不知道这样行不行?(但总觉得这样可能有问题)

 

 

 

posted @ 2013-01-25 15:08  百分百好牛  阅读(175)  评论(0编辑  收藏  举报