给定一个数组 prices
,它的第 i
个元素 prices[i]
表示一支给定股票第 i
天的价格。
你只能选择 某一天 买入这只股票,并选择在 未来的某一个不同的日子 卖出该股票。设计一个算法来计算你所能获取的最大利润。
返回你可以从这笔交易中获取的最大利润。如果你不能获取任何利润,返回 0
。
思路 动态规划
- 第 i 天卖出股票,则买入股票在第 j 天,有0 <= j < i,利润为 prices[i] - prices[j];
- 在下标范围 [0, i − 1] 中选择最小值作为 prices[j]
public class Solution {
public int MaxProfit(int[] prices) {
int maximumProfit = 0, preMin = prices[0];
for(int i = 1; i < prices.Length; i++)
{
maximumProfit = Math.Max(maximumProfit, prices[i] - preMin);
preMin = Math.Min(prices[i], preMin);
}
return maximumProfit;
}
}
复杂度分析
-
时间复杂度:O(n),其中 n 是数组 prices 的长度。需要遍历数组一次,每个下标处的计算时间是 O(1)。
-
空间复杂度:O(1)。