题目描述:

买卖股票的最佳时机

给定一个数组 prices ,它的第 i 个元素 prices[i] 表示一支给定股票第 i 天的价格。

你只能选择 某一天 买入这只股票,并选择在 未来的某一个不同的日子 卖出该股票。设计一个算法来计算你所能获取的最大利润。

返回你可以从这笔交易中获取的最大利润。如果你不能获取任何利润,返回 0

解题代码:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
class Solution {
public:
int maxProfit(vector<int>& prices) {
int min = prices[0];
int max_profit = 0;

for(int day: prices){
max_profit = max_profit>(day-min)?max_profit:(day-min);
min = min<(day)?min:day;
}

return max_profit;
}
};

image-20231001235321662

解读与收获:

拿现实中举个例子,如果我们买彩票想计算如果我们今天卖出,最多能赚多少,那一定是需要我们在之前价格最低的一天买入,所以我们一次遍历该数组,记录下历史最低价格,就假设我们是那天买入的,之后再继续遍历每天的利润(卖出-买入),记录下一个最大值。这样在一次遍历之后,就能得到最优解。