返回
让LeetCode网站助力你的股票投资决策,动态规划与极值更新为您导航
前端
2024-01-22 16:31:16
# LeetCode——买卖股票的最佳时机:动态规划+更新极值
欢迎各位来到LeetCode的股票最佳时机专场!今天,我们将为您奉上一道精彩的难题,并提供详细的解决方案。
## 题目
你手上有数列arr,其中每个元素arr[i]表示某支股票在第i天收盘时每股的价格。请你设计一个算法,寻找买卖股票的最佳时机,以获得最大利润。
## 思路一:更新最大值和最小值
为了解决这道难题,我们可以采用更新最大值和最小值的算法。具体步骤如下:
1. 假设第一个元素是价格最小的值minPrice。
2. 定义一个价格最大差maxPriceDiff,并设置值为0。
3. 从数组的第二个元素开始更新价格最大差和最小值。
4. 当股票价格高于当前的最小价格minPrice时,更新maxPriceDiff为max(maxPriceDiff, currentPrice - minPrice)。
5. 当股票价格低于当前的最小价格minPrice时,更新minPrice为currentPrice。
## 思路二:动态规划
除了更新最大值和最小值之外,我们还可以采用动态规划的方法来解决这道难题。具体步骤如下:
1. 构建一个数组dp,其中dp[i]表示在第i天卖出股票所能获得的最大利润。
2. 初始化dp[0]为0。
3. 从数组的第二个元素开始计算dp[i]:
* 如果dp[i-1] > 0,则dp[i] = dp[i-1] + arr[i] - arr[i-1]。
* 否则,dp[i] = arr[i] - arr[i-1]。
## 代码实现
```python
def maxProfit(arr):
"""
:type arr: List[int]
:rtype: int
"""
if not arr:
return 0
minPrice = arr[0]
maxPriceDiff = 0
for i in range(1, len(arr)):
if arr[i] < minPrice:
minPrice = arr[i]
else:
maxPriceDiff = max(maxPriceDiff, arr[i] - minPrice)
return maxPriceDiff
def maxProfit_dp(arr):
"""
:type arr: List[int]
:rtype: int
"""
if not arr:
return 0
dp = [0] * len(arr)
dp[0] = 0
for i in range(1, len(arr)):
if dp[i-1] > 0:
dp[i] = dp[i-1] + arr[i] - arr[i-1]
else:
dp[i] = arr[i] - arr[i-1]
return max(dp)
总结
通过更新最大值和最小值以及动态规划这两种算法,我们能够有效地解决LeetCode的股票最佳时机难题。希望本次讲解能对各位有所帮助!