解题思路

首先我们需要计算的是最大的利润,这个目标很明确。我们需要注意的是,这里股票只能先买,然后才能卖,所以如果我们扫描一遍只找最大最小值,可能最大值就会在最小值的前面,这个时候就错了。其实这里我们只需要保存最小值就行了,然后每次都计算一次利润,然后比对一下,如果发现有更小的价格,则更新最小价格。

代码

class Solution {
public:
    int maxProfit(vector<int>& prices) {
        int profit = 0,  min_ind = 0;
        for(int i = 1; i < prices.size(); i++) {
            if(prices[i] > prices[min_ind]) profit = max(profit, prices[i] - prices[min_ind]);
            if(prices[i] < prices[min_ind]) min_ind = i;
        }
        return profit;
    }
};