假设我们有一个称为nums的数字列表,它们按时间顺序表示公司的股票价格,并且还有另一个值k,我们必须找到最多可以通过k次买卖获得的最大利润(我们必须购买出售之前,以及购买之前出售)。
因此,如果输入就像价格= [7、3、5、2、3] k = 2,那么输出将是3,因为我们可以在3处购买,然后在5处出售,再次在2处购买,然后出售在3。
为了解决这个问题,我们将遵循以下步骤-
定义一个功能dp()
。这将花费i,k
如果我等于价格的大小或k等于0,则
返回0
如果买的是真的,那么
返回(dp(i + 1,k-1,False)+ price [i])和dp(i + 1,k,购买)的最大值
除此以外,
返回(dp(i + 1,k,True)-price [i])和dp(i + 1,k,购买)的最大值
从主方法调用dp(0,k,False)并返回结果
让我们看下面的实现以更好地理解-
class Solution: def solve(self, prices, k): def dp(i, k, bought): if i == len(prices) or k == 0: return 0 if bought: return max(dp(i + 1, k - 1, False) + prices[i], dp(i + 1, k, bought)) else: return max(dp(i + 1, k, True) - prices[i], dp(i + 1, k, bought)) return dp(0, k, False) ob = Solution()prices = [7, 3, 5, 2, 3] k = 2 print(ob.solve(prices, k))
[7, 3, 5, 2, 3], 2
输出结果
3