class Solution
{
public:
int maxProfit(vector<int>& prices)
{
// 初始时,把第 0 天的价格当作当前认为的买入价格(后续会动态更新)
int current_end = prices[0];
// 初始利润为 0 ,表示还没找到能赚钱的买卖时利润为 0
int current_profit = 0;
// 从第 1 天开始遍历价格数组,因为至少需要两天(买入和卖出)才有利润可言
for(int i = 1; i < prices.size(); i++)
{
// 关键步骤 1:更新当前认为的最低买入价格
// 每次遇到一个新的价格,就看看它是否比之前记录的买入价格更低
// 如果是,就更新买入价格为这个更低的价格,这样后续如果有高价,利润可能更大
current_end = min(current_end, prices[i]);
// 关键步骤 2:计算当前价格卖出能获得的利润,并更新最大利润
// 用当前价格减去当前认为的最低买入价格,得到当天卖出能赚的钱
// 如果这个利润比之前记录的最大利润高,就更新最大利润
current_profit = max(current_profit, prices[i] - current_end);
}
// 最后返回能获得的最大利润,如果一直是亏损(利润为负),就返回初始的 0
return current_profit;
}
};