题目描述:给定一个数组 prices ,它的第 i 个元素 prices[i] 表示一支给定股票第 i 天的价格。你只能选择 某一天 买入这只股票,并选择在 未来的某一个不同的日子 卖出该股票。设计一个算法来计算你所能获取的最大利润。

方法1:暴力循环,时间复杂度过高,无法通过所有样例

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

方法2:从倒数第二天开始,不断更新最高出售价格,收益为max(当前最高收益,最高的卖价-当前购买价格)

class Solution {
public:
    int maxProfit(vector<int>& prices) {
        int i = prices.size()-1;
        int max_sale = prices[i];//第i天买股票后最高的卖价
        int m = 0;//最高收益
        for(int j=i-1;j>=0;j--){
            m = max(m,max_sale - prices[j]);
            max_sale = max(prices[j],max_sale);//更新最高的卖价
        }
        return m;
    }
};

方法3:从第一天开始,不断更新最低购买价格,收益为max(当前最高收益,当前卖价-最低购买价格)

class Solution {
public:
    int maxProfit(vector<int>& prices) {
        int min_sale = prices[0];//第i天卖股票后最低的买价
        int m = 0;//最高收益
        for(int i=1;i<prices.size();i++){
            m = max(m,prices[i] - min_sale);
            min_sale = min(min_sale,prices[i]);//更新最低的买价
        }
        return m;
    }
};