-
题目:剑指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;
}
};