剑指Offer63.股票的最大利润

  • 题目:剑指Offer63.股票的最大利润
    数组prices的每个元素表示当天的股票价格;
    只能进行一笔交易(即某一天买入,之后的某一天卖出),求最大利润;

  • 思路:
    1.dp:O(n):扫一次,O(1):当天卖出能获得的最大利润只与截止到目前的历史最低值minVal有关;
    如果第i天我们想卖,那么我们一定希望是历史价格最低的那天买入的,这样利润才会最大;
    因此我们每天都尝试卖出,并且买入价格都按历史最低算;

class Solution {
    
    
public:
    int maxProfit(vector<int>& prices) {
    
    
        if (prices.empty()) return 0;
         
        int minVal = INT_MAX, res = INT_MIN;
        for (auto price : prices) {
    
    
            minVal = min(minVal, price);//更新历史最低价
            res = max(res, price - minVal);//我们可以假设,如果今天要卖的话,我们是以历史最低价买入的
        }

        return res;
    }
};

猜你喜欢

转载自blog.csdn.net/jiuri1005/article/details/114449695