返回

股市制胜法宝:教你如何玩转 122. 买卖股票的最佳时机 II

后端







大家好,我是你们的老朋友,一个致力于用独特视角探索科技世界的前端达人。今天,咱们继续我们的刷题之旅,直面 122. 买卖股票的最佳时机 II。

这道题乍一看有点复杂,但其实只要掌握核心思想,它就是一道送分题。话不多说,咱们先来了解一下题目的背景:

**题目** 

小明是个股市新手,他有一笔钱准备投资股票。为了获得最大的利润,小明需要在恰当的时机买入和卖出股票。已知股票的价格以数组的形式给出,每个元素代表某一天的股票价格。小明最多可以进行 k 笔交易,每笔交易包含一次买入和一次卖出。请帮助小明计算他可以获得的最大利润。

**核心思路** 

这道题的关键在于巧用贪婪算法。具体步骤如下:

1. **初始化变量** :设置 profit 为 0,表示当前的利润。
2. **遍历股票价格数组** :
   - 如果当前价格比前一天的价格低,则买入股票,更新 profit 为当前价格减去前一天的价格。
   - 如果当前价格比前一天的价格高,则卖出股票,更新 profit 为当前价格减去前一天的价格。
3. **限制交易次数** :如果交易次数超过 k,则跳过当前操作。
4. **返回最终利润** :遍历结束后,返回 profit。

**代码实现** 

```python
def max_profit(prices, k):
    if not prices or k == 0:
        return 0

    n = len(prices)
    dp = [[0] * n for _ in range(k + 1)]

    for i in range(1, k + 1):
        max_diff = -prices[0]
        for j in range(1, n):
            dp[i][j] = max(dp[i][j - 1], max_diff + prices[j])
            max_diff = max(max_diff, dp[i - 1][j - 1] - prices[j])

    return dp[k][n - 1]

举个栗子

假设股票价格为 [7, 1, 5, 3, 6, 4],k = 2。

Day 1: 买入股票,profit = -7
Day 2: 卖出股票,profit = 6 - 1 = 5
Day 3: 买入股票,profit = 5 - 5 = 0
Day 4: 卖出股票,profit = 6 - 3 = 3
Day 5: 买入股票,profit = 3 - 6 = -3
Day 6: 卖出股票,profit = 4 - 4 = 0

最终利润:5 + 3 = 8

总结

掌握了这个贪婪算法,你就可以轻松应对 122. 买卖股票的最佳时机 II 了。记住,股市有风险,入市需谨慎。祝各位在股海中乘风破浪,赚得盆满钵满!