121. 买卖股票的最佳时机

暴力双循环,超时

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

一次遍历,记录最低价格minPrice,然后计算maxProfit,每遍历过一天后,可以更新minPrice,因为我们总是先买入再卖出

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

你可能感兴趣的:(LeetCode,算法,数据结构)