121. 买卖股票的最佳时机 (muliset维护最大值、DP思想)

买卖股票的最佳时机
DP的阶段就是天数,记录下历史最低价格,用新出现的价格更新答案,并更新历史最小值。
时间复杂度:
O ( n ) O(n)

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

这里提供一个更直观的解法。
时间复杂度: O ( n l o g ( n ) ) O(n*log(n))

class Solution {
public:
    int maxProfit(vector<int>& prices) {
        int ans = 0;
        multiset<int> ms;
        for(int x:prices){
            ms.insert(x);
        }
        for(int i=0;i<prices.size();i++){
            ms.erase(ms.find(prices[i]));
            if(!ms.empty()) ans = max(ans,*ms.rbegin()-prices[i]);
        }
        return ans;
    }
};

猜你喜欢

转载自blog.csdn.net/qq_44846324/article/details/107455408