题目描述:
股票最大收益问题
给定一段时间的某支股票价格集合,允许买卖各一次,求最大收益是多少?
例如
给定收入序列:[4,5,9,2,5,4,8]
为了满足要求,我们在第四天买入,第七天卖出,收益最大为6
结题思路:
暴力求解法的话,这里就不过多赘述了。博主当时脑子瓦特了,直接写了一波暴力解,复杂度当然就是O(n^2)了。面试官理所当然的很不满意,问我能不能优化。
沉思之后,我猛然发现这是一个典型的动态规划问题,动态规划的思想我就不说了,还请打开百度,移步其他博客。
针对此题,我做一个简单分析。一只股票,我们肯定要先买后卖(买入必定在卖出之前发生),也就是说我们收益最少也是0元(当天买入当天卖出)。所以我们只需要遍历一遍序列即可求的解。在遍历中,我们维持一个买入的最低价和一个当前最大收益,并且用遍历到的价格减去最低价来获得当前卖出可获得的最大收益的值,我们在这个收益值与历史最大收益值中取较大的一个即可。使用此办法之后,时间复杂度瞬间降到了O(n),面试官脸上也露出些许欣喜之色。
C++代码:
#include <iostream>
#include <vector>
using namespace std;
/*