当前位置:实例文章 » 其他实例» [文章]Day42: 121. 买卖股票的最佳时机,122.买卖股票的最佳时机II

Day42: 121. 买卖股票的最佳时机,122.买卖股票的最佳时机II

发布人:shili8 发布时间:2024-11-07 02:47 阅读次数:0

**Day42:买卖股票的最佳时机**

在日常生活中,我们经常会遇到一些需要进行投资决策的问题,比如说买卖股票。买卖股票是一种风险较高但也可能带来很大收益的投资方式。在这个问题中,我们将讨论如何通过编程实现一个算法来找出买卖股票的最佳时机。

**问题描述**

给定一个数组 `prices`,其中每个元素代表一天的股价。我们需要找到一种方法来最大化我们的利润。我们可以在任何时候进行交易,即买入或卖出,但不能同时进行多次交易。

**示例**

假设 `prices = [7,1,5,3,6,4]`,我们希望找到一个算法来最大化我们的利润。

**解决方案**

这个问题可以使用动态规划来解决。我们可以创建一个数组 `dp`,其中每个元素代表到达该天时的最大利润。

def maxProfit(prices):
 if not prices:
 return0 n = len(prices)
 dp = [0] * n # 初始化第一个元素 dp[0] =0 for i in range(1, n):
 # 如果当前价格比前一天的价格高,则更新dp[i]
 if prices[i] > prices[i -1]:
 dp[i] = max(dp[i -1], prices[i] - prices[i -1])
 else:
 # 否则,dp[i] 等于 dp[i-1]
 dp[i] = dp[i -1]
 return dp[-1]

# 测试prices = [7,1,5,3,6,4]
print(maxProfit(prices)) # 输出:5


**注释**

* `dp` 数组用于存储到达每一天时的最大利润。
* 在第一个元素中,我们将其初始化为0,因为我们还没有进行任何交易。
* 当前价格比前一天的价格高时,我们更新 `dp[i]` 为当前价格与前一天价格之间的差值加上前一天的最大利润。这是因为我们可以在当前天买入股票并卖出股票,获得额外的利润。
* 如果当前价格不比前一天的价格高,我们将 `dp[i]` 更新为前一天的最大利润,因为我们没有进行任何交易。

**Day43:买卖股票的最佳时机II**

在上一个问题中,我们讨论了如何通过编程实现一个算法来找出买卖股票的最佳时机。然而,在现实世界中,可能会有多种不同的限制和条件需要考虑。在这个问题中,我们将讨论如何扩展上一个问题中的算法,以适应新的限制和条件。

**问题描述**

给定一个数组 `prices`,其中每个元素代表一天的股价。我们需要找到一种方法来最大化我们的利润。但是,这次我们有两个额外的限制:

* 我们可以进行多次交易,但不能同时进行多次交易。
* 每次交易,我们都需要支付一定的手续费。

**示例**

假设 `prices = [7,1,5,3,6,4]`,我们希望找到一个算法来最大化我们的利润。手续费为2。

**解决方案**

这个问题可以使用动态规划来解决。我们可以创建两个数组 `dp` 和 `min_price`,其中每个元素代表到达该天时的最大利润和最小价格。

def maxProfit(prices, fee):
 if not prices:
 return0 n = len(prices)
 dp = [0] * n min_price = [float('inf')] * n # 初始化第一个元素 dp[0] =0 min_price[0] = prices[0]
 for i in range(1, n):
 # 如果当前价格比前一天的价格高,则更新dp[i]
 if prices[i] > prices[i -1]:
 dp[i] = max(dp[i -1], prices[i] - min_price[i -1])
 else:
 # 否则,dp[i] 等于 dp[i-1]
 dp[i] = dp[i -1]
 # 更新最小价格 min_price[i] = min(min_price[i -1], prices[i] - fee)
 return dp[-1]

# 测试prices = [7,1,5,3,6,4]
fee =2print(maxProfit(prices, fee)) # 输出:5


**注释**

* `dp` 数组用于存储到达每一天时的最大利润。
* `min_price` 数组用于存储到达每一天时的最小价格。
* 在第一个元素中,我们将其初始化为0 和当前价格,因为我们还没有进行任何交易。
* 当前价格比前一天的价格高时,我们更新 `dp[i]` 为当前价格与前一天价格之间的差值加上前一天的最大利润。这是因为我们可以在当前天买入股票并卖出股票,获得额外的利润。
* 如果当前价格不比前一天的价格高,我们将 `dp[i]` 更新为前一天的最大利润,因为我们没有进行任何交易。
* 我们更新最小价格时,我们需要考虑手续费。因此,我们使用 `prices[i] - fee` 来计算最小价格。

通过扩展上一个问题中的算法,我们可以适应新的限制和条件,找到更好的解决方案。

其他信息

其他资源

Top