給定數組 prices,第 i 個元素是第 i 天股票價格。只允許完成最多一筆交易(買入後賣出),求最大利潤。
遍歷數組,維護到當前為止的最低價格 `minPrice`,第 i 天賣出的最大利潤為 `prices[i] - minPrice`。全局最大值即為答案。
class Solution {
public:
int maxProfit(vector<int>& prices) {
int n = prices.size();
if(n == 0) return 0;
int minPrice = prices[0];
int maxProfit = 0;
for(int i = 1; i < n; i++) {
maxProfit = max(maxProfit, prices[i] - minPrice);
minPrice = min(minPrice, prices[i]);
}
return maxProfit;
}
};
本題是股票系列的入門,核心思想是「維護歷史最小值,計算當前差值」,這是許多單遍歷優化問題的通用模式。