假定你是交易员,必须在股票开盘时作出买入或卖出的决定。设计一个算法,根据给定的股价走势信息,决定买入和卖出策略,该策略必须实现利润的最大化。
在算法题01中,我们提到了暴力枚举法求解问题,其代码量小,便于理解。但是经过计算我们发现算法的复杂度为 O ( n 2 ) O(n^2) O(n2)。(https://blog.csdn.net/WINNER_QIUQIU/article/details/105663322)
通过阅读Python程序员面试宝典一书,书中提到了最优解法,具体代码如下:
minPrice = S[0]
N = 0
profit = 0
selDay = 0
buyDay = 0
for N in range(len(S)-1):
if(S[N]<minPrice):
minPrice = S[N]
buyDay = N
if(S[N+1]-minPrice > profit):
profit = S[N+1] - minPrice
selDay = N+1
print("应该在{}天买入,第{}天卖出,最大交易利润为:{}".format(buyDay+1,selDay+1,profit))
通过代码可以容易看出此算法的复杂度为 O ( n ) O(n) O(n),相比于暴力枚举法整整降低了一个数量级。
最后需要注意的是,此算法存在卖出时间会在买入时间之前的问题,希望有大佬留言评论提出解决问题的方法。