返回
LeetCode Top100 挑战:买卖股票的最佳时机 - 每日一题之 15/100
前端
2023-10-26 11:49:46
前言
欢迎来到 LeetCode Top100 挑战系列文章的第 15 篇!在这一系列文章中,我们将每天解决一道 LeetCode 算法题,并分享我们的解题思路和代码实现。今天,我们要解决的是一道经典的股票交易问题——买卖股票的最佳时机。
题目
给定一个数组 prices,其中 prices[i] 是股票在第 i 天的价格。你只能买卖股票一次。你的目标是最大化你的利润。
示例 1:
输入:prices = [7,1,5,3,6,4]
输出:5
解释:在第 2 天买入股票,在第 5 天卖出股票,利润为 6-1 = 5。
示例 2:
输入:prices = [7,6,4,3,1]
输出:0
解释:在这种情况下,没有交易机会,所以利润为 0。
提示:
- 1 <= prices.length <= 3 * 10^4
- 0 <= prices[i] <= 10^4
解题思路
这个问题可以采用贪心算法来解决。贪心算法是一种在每个步骤中做出局部最优选择,从而达到全局最优解的算法。在解决这个问题时,我们可以使用两个变量来记录股票的最低价格和最高价格。每当遇到一个比最低价格更低的价格时,我们就更新最低价格;每当遇到一个比最高价格更高的价格时,我们就更新最高价格。最后,我们计算最高价格与最低价格的差值,这就是我们可以获得的最大利润。
代码示例
def max_profit(prices):
"""
计算买卖股票的最大利润。
参数:
prices: 股票价格列表。
返回:
最大利润。
"""
# 初始化最低价格和最高价格。
min_price = float('inf')
max_price = 0
# 遍历股票价格列表。
for price in prices:
# 更新最低价格。
if price < min_price:
min_price = price
# 更新最高价格。
if price > max_price:
max_price = price
# 计算最大利润。
profit = max_price - min_price
# 返回最大利润。
return profit
# 测试代码。
prices = [7, 1, 5, 3, 6, 4]
profit = max_profit(prices)
print(profit) # 5
prices = [7, 6, 4, 3, 1]
profit = max_profit(prices)
print(profit) # 0
厉害老哥的写法
def max_profit(prices):
"""
计算买卖股票的最大利润。
参数:
prices: 股票价格列表。
返回:
最大利润。
"""
# 初始化最大利润。
max_profit = 0
# 遍历股票价格列表。
for i in range(1, len(prices)):
# 计算当前利润。
profit = prices[i] - prices[i-1]
# 更新最大利润。
if profit > max_profit:
max_profit = profit
# 返回最大利润。
return max_profit
# 测试代码。
prices = [7, 1, 5, 3, 6, 4]
profit = max_profit(prices)
print(profit) # 5
prices = [7, 6, 4, 3, 1]
profit = max_profit(prices)
print(profit) # 0
每日一题
从今天开始,我们将不鸽,每天一道算法题并发布文章。希望大家共同学习和进步!
总结
在本文中,我们详细讲解了如何使用贪心算法解决买卖股票的最佳时机问题。此外,我们还分享了一位厉害老哥的解法,以供大家学习和参考。最后,我们宣布从今天开始,我们将不鸽,每天一道算法题并发布文章,希望大家共同学习和进步!