代码随想录算法训练营第五十天 | 123.买卖股票的最佳时机III、188.买卖股票的最佳时机IV
发布人:shili8
发布时间:2025-02-27 06:47
阅读次数:0
**代码随想录算法训练营第五十天**
今天,我们将继续讨论两个经典的问题:《买卖股票的最佳时机III》和《买卖股票的最佳时机IV》。
###问题一:买卖股票的最佳时机III这个问题是这样的:
给定一个数组 `prices`,其中每个元素都是一个整数,代表某只股票在不同时间点的价格。请你写一个函数 `maxProfit`,返回可以获得的最大利润。
**注意**:你可以自由地进行交易,但不能同时持有多只股票。
#### 示例:
* 输入:`prices = [7,1,5,3,6,8]`
输出:`5`
* 输入:`prices = [7,6,4,3,1]`
输出:`0`
#### 思路:
这个问题可以使用动态规划来解决。我们可以维护一个数组 `dp`,其中每个元素代表到当前时间点为止,可以获得的最大利润。
####代码:
def maxProfit(prices): n = len(prices) dp = [0] * (n +1) for i in range(1, n +1): # 如果前一天没有股票,今天可以选择买入或不买入 dp[i] = max(dp[i -1], prices[i -1]) # 如果前一天有股票,今天可以选择卖出或不卖出 if i >1: dp[i] = max(dp[i], dp[i -1] + (prices[i -1] - prices[i -2])) return dp[n]
###问题二:买卖股票的最佳时机IV这个问题是这样的:
给定一个数组 `prices`,其中每个元素都是一个整数,代表某只股票在不同时间点的价格。请你写一个函数 `maxProfit`,返回可以获得的最大利润。
**注意**:你可以自由地进行交易,但不能同时持有多只股票。
#### 示例:
* 输入:`prices = [1,2,3,4,5]`
输出:`4`
* 输入:`prices = [7,6,4,3,1]`
输出:`0`
#### 思路:
这个问题可以使用动态规划来解决。我们可以维护一个数组 `dp`,其中每个元素代表到当前时间点为止,可以获得的最大利润。
####代码:
def maxProfit(prices): n = len(prices) dp = [0] * (n +1) for i in range(1, n +1): # 如果前一天没有股票,今天可以选择买入或不买入 dp[i] = max(dp[i -1], prices[i -1]) # 如果前一天有股票,今天可以选择卖出或不卖出 if i >1: dp[i] = max(dp[i], dp[i -1] + (prices[i -1] - prices[i -2])) return dp[n]
### 总结:
在本文中,我们讨论了两个经典的问题:《买卖股票的最佳时机III》和《买卖股票的最佳时机IV》。我们使用动态规划来解决这些问题,并提供了详细的代码示例。
**注意**:以上代码仅供参考,实际应用中可能需要进行调整和优化。