📅  最后修改于: 2023-12-03 15:06:18.664000             🧑  作者: Mango
题目描述:
给定一个数组,它的第 i 个元素是一支给定股票第 i 天的价格。
如果你最多只允许完成一笔交易(即买入和卖出一支股票),设计一个算法来计算你所能获取的最大利润。
注意:你不能在买入股票前卖出股票。
示例 1:
输入: [7,1,5,3,6,4] 输出: 5 解释: 在第 2 天(股票价格 = 1)的时候买入,在第 5 天(股票价格 = 6)的时候卖出,最大利润 = 6-1 = 5。
示例 2:
输入: [7,6,4,3,1] 输出: 0 解释: 在这种情况下, 没有交易完成, 所以最大利润为 0。
代码示例:
class Solution:
def maxProfit(self, prices: List[int]) -> int:
if not prices:
return 0
n = len(prices)
min_price, max_profit = prices[0], 0
for i in range(1, n):
if prices[i] < min_price:
min_price = prices[i]
else:
max_profit = max(max_profit, prices[i] - min_price)
return max_profit
代码说明:
这是一道简单的动态规划题目。我们可以用两个变量来记录当前最小的股票价格和当前的最大利润。遍历数组,如果当前价格比最小价格小,则更新最小价格;否则,计算当前价格和最小价格的差值,如果大于当前的最大利润,则更新最大利润。
时间复杂度:O(n)
空间复杂度:O(1)
题目链接: