剑指offer2之股票的最大利润

题目(股票的最大利润)

假设把某股票的价格按时间先后顺序存储在数组中,请问买卖该股票一次可能获得的最大利润是多少?例如,一只股票在某些时间节点的价格为{9,11,8,5,7,12,16,14}。如果我们在价格为 5 的时候买入并在价格为 16 时卖出,则能获得最大的利润为 11。

算法思路

本题抽象出来就是,在不改变数组元素顺序的前提下,找到一对数对,他们的差值最大。
首先,由常识可知,在股票最低价的时候买入,最高价的时候卖出,最后所得的利润是最大的。
那么当我们买入第 i 个时间节点的股票时(此时相当于固定了卖出价),那么必须在之前的最低价格时买入,所以我们需要设置一个变量 min 记录 i 之前的最低价格(即 i 之前的最小数组元素)。当当前的价格小于 min,那么就更新 min 的值,否则就算出此时能够获得的利润,再将其与目前的最大利润比较,如果更大,则更新当前的最大利润。

算法实现

复杂度分析

算法仅遍历一次数组,时间复杂度为 O(n);空间复杂度为 O(1)。

参考

[1] <<剑指offer2>>

-------------本文结束感谢您的阅读-------------