题目
假设把某股票的价格按照时间先后顺序储存在数组中,请问买卖该股票一次可能获得的最大利润是多少?例如,一只股票在某些时间节点的价格为{9,11,8,5,7,12,16,14}。如果我们能在价格为5的时候买入并在价格为16的时候卖出,则能收获最大的利润11。
解题思路
- 在遍历数组时记录下遍历到某个节点能够买入的最低价格,即该节点前面所有数字的最小值;
- 则可以算出在当前节点价位卖出时可能得到的最大利润;
- 这样遍历一次数组就能得到结果,时间复杂度为O(n)。
代码
class Solution{
public:
int maxProfit(vector<int>& prices){
if(prices.size() < 2) return 0;
int min = prices[0]; //每个节点前最低价格
int resu = prices[1] - min;//每个节点的最大利润
for(int i = 2; i < prices.size(); i++){
//更新最低价格
if(prices[i-1] < min) min = prices[i-1];
//更新最大利润
if((prices[i] - min) > resu) resu = prices[i] - min;
}
if(resu > 0) return resu;
return 0;
}
};