买卖股票的最佳时机
DP的阶段就是天数,记录下历史最低价格,用新出现的价格更新答案,并更新历史最小值。
时间复杂度:
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;
}
};
这里提供一个更直观的解法。
时间复杂度:
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;
}
};