// 面试题63:股票的最大利润 | |
// 题目:假设把某股票的价格按照时间先后顺序存储在数组中,请问买卖交易该股 | |
// 票可能获得的利润是多少?例如一只股票在某些时间节点的价格为{9, 11, 8, 5, | |
// 7, 12, 16, 14}。如果我们能在价格为5的时候买入并在价格为16时卖出,则能 | |
// 收获最大的利润11。 |
解析:要找出数组中所有的数对,并比较它们的差值.时间复杂度是O(n2)
但是如果在扫描到数组中的第 i 个数字时,只要我们能够记住之前的 i-1 个数字中的最小值,就能算出在当前价位卖出时可能得到的最大利润。
#include <iostream>
#include <vector>
using namespace std;
int MaxDiff(vector<int> &vec){
if(vec.size() < 2)
return 0;
int min = vec[0];
int res = vec[1] - min;
for(int i=2;i<vec.size();++i){
if(min > vec[i-1])
min = vec[i-1];
if((vec[i]-min) > res)
res = vec[i] - min;
}
return res;
}
int main(){
vector<int> vec{9,11,8,5,7,12,16,14};
cout<<MaxDiff(vec)<<endl;
return 0;
}