121. 买卖股票的最佳时机
目录
一、问题描述
二、解题思路
三、代码
四、复杂度分析
一、问题描述
给定一个数组 prices
,它的第 i
个元素 prices[i]
表示一支给定股票第 i
天的价格。
你只能选择 某一天 买入这只股票,并选择在 未来的某一个不同的日子 卖出该股票。设计一个算法来计算你所能获取的最大利润。
返回你可以从这笔交易中获取的最大利润。如果你不能获取任何利润,返回 0
。
二、解题思路
🧠 题目理解
-
给定一组股票价格:
prices[i]
是第i
天的价格。 -
你只能买一次、卖一次(而且买入在前,卖出在后)。
-
求:最大利润
= 卖出价格 - 买入价格
。 -
如果价格一直下降(没法盈利),返回
0
。
✅ 解题思路
遍历数组,同时记录:
-
当前看到的 最低价格
minPrice
-
当前能获得的 最大利润
maxProfit
每一步:
-
用当前价格减去历史最低价
profit = prices[i] - minPrice
-
和最大利润比较,更新
maxProfit
三、代码
class Solution {
public:int maxProfit(vector<int>& prices) {int minPrice = INT_MAX;int maxProfit = 0;for (int price : prices) {if (price < minPrice) {minPrice = price; // 更新最低价格} else {maxProfit = max(maxProfit, price - minPrice); // 更新最大利润}}return maxProfit;}
};
四、复杂度分析
-
时间复杂度:O(n)(只遍历一次)
-
空间复杂度:O(1)(只用了常数变量)