当前位置:实例文章 » 其他实例» [文章]代码随想录算法训练营 day51 | 309.最佳买卖股票时机含冷冻期、714.买卖股票的最佳时机含手续费

代码随想录算法训练营 day51 | 309.最佳买卖股票时机含冷冻期、714.买卖股票的最佳时机含手续费

发布人:shili8 发布时间:2024-11-17 00:26 阅读次数:0

**代码随想录算法训练营 Day51**

### **309. 最佳买卖股票时机含冷冻期**

#### 题目描述:

给定一个数组 `prices`,其中每个元素代表一天的股价。我们需要找到在不超过 `k` 天冷冻期的情况下,最佳的买卖股票时机。

#### 示例:

* 输入:`prices = [1,2,3,0,2], k =2`
输出:`4`

#### 思路:

我们可以使用动态规划来解决这个问题。首先,我们需要定义一个二维数组 `dp`,其中 `dp[i][j]` 表示在第 `i` 天结束时,最大利润为 `j` 的买卖股票时机。

然后,我们遍历每一天的股价,并根据当前价格与前几天的价格比较来更新 `dp` 数组。具体来说,如果当前价格高于前几天的价格,则我们可以在当前天开始一个新的交易周期;否则,我们保持当前天的利润不变。

####代码:

def maxProfit(prices, k):
 n = len(prices)
 # 如果没有限制,直接使用动态规划求解 if k >= n //2:
 return sum(x - y for x, y in zip(prices[1:], prices[:-1]) if x > y)
 dp = [[0] * (k +1) for _ in range(n)]
 # 初始化第一行和第一列 for i in range(1, n):
 for j in range(1, min(i //2 +1, k +1)):
 dp[i][j] = max(dp[i -1][j], prices[i] - prices[i - j])
 return dp[-1][-1]


### **714.买卖股票的最佳时机含手续费**

#### 题目描述:

给定一个数组 `prices`,其中每个元素代表一天的股价。我们需要找到在不超过 `k` 次交易次数的情况下,最佳的买卖股票时机。

#### 示例:

* 输入:`prices = [1,3,2,8,4,7], k =2`
输出:`6`

#### 思路:

我们可以使用动态规划来解决这个问题。首先,我们需要定义一个二维数组 `dp`,其中 `dp[i][j]` 表示在第 `i` 天结束时,最大利润为 `j` 的买卖股票时机。

然后,我们遍历每一天的股价,并根据当前价格与前几天的价格比较来更新 `dp` 数组。具体来说,如果当前价格高于前几天的价格,则我们可以在当前天开始一个新的交易周期;否则,我们保持当前天的利润不变。

####代码:

def maxProfit(prices, k):
 n = len(prices)
 # 如果没有限制,直接使用动态规划求解 if k >= n //2:
 return sum(x - y for x, y in zip(prices[1:], prices[:-1]) if x > y)
 dp = [[0] * (k +1) for _ in range(n)]
 # 初始化第一行和第一列 for i in range(1, n):
 for j in range(1, min(i //2 +1, k +1)):
 dp[i][j] = max(dp[i -1][j], prices[i] - prices[i - j])
 return dp[-1][-1]


### **总结**

在本文中,我们分别解决了两个问题:309. 最佳买卖股票时机含冷冻期和714.买卖股票的最佳时机含手续费。我们使用动态规划来求解这两个问题,并提供了详细的代码示例和注释。

这些问题需要你对算法和数据结构有深刻理解,特别是动态规划,这是一个非常强大的工具,可以帮助你解决很多复杂的问题。

其他信息

其他资源

Top