跳转至

4069. 买卖股票的最佳时机含冷冻期 II 🔒

难度中等

题目描述

给定一个长度为 n 的整数数组 prices,其中 prices[i] 表示第 i 天的股票价格。

同时给定一个整数 cooldown 和一个长度为 n 的整数数组 costs。其中,costs[k] 表示一笔股票恰好持有 k 天时需要支付的 总持有费用。

你可以进行任意次数的交易,也可以不进行任何交易,但需要满足以下规则:

  • 任意时刻你 最多只能持有一股 股票。在再次买入之前,必须先卖出当前持有的股票。
  • 如果你在第 j 天卖出股票,那么最早可以在第 j + cooldown + 1 天再次买入股票。
  • 如果你在第 i 天买入,并在第 j 天卖出,那么持有时长为 j - i 天。你需要为该笔交易支付一次费用 costs[j - i]。

在第 i 天买入并在第 j 天卖出的利润为 prices[j] - prices[i] - costs[j - i]。

返回你能够获得的 最大总利润。如果不存在任何有利可图的交易,则返回 0。

 

示例 1:

输入: prices = [1,5,3], cooldown = 1, costs = [2,0,1]

输出: 4

解释:

最优策略如下:

  • 在第 0 天以 prices[0] = 1 的价格买入。
  • 在第 1 天以 prices[1] = 5 的价格卖出。持有时长为 1 天,因此持有费用为 costs[1] = 0。
  • 因此,该笔交易的利润为 5 - 1 - 0 = 4。
  • 卖出后,由于 cooldown = 1,第 2 天不能再买入股票,因此无法进行更多交易。
  • 能够获得的最大利润为 4。

示例 2:

输入: prices = [1,2,5], cooldown = 0, costs = [0,2,1]

输出: 3

解释:

最优策略如下:

  • 在第 0 天以 prices[0] = 1 的价格买入。
  • 在第 2 天以 prices[2] = 5 的价格卖出。持有时长为 2 天,因此持有费用为 costs[2] = 1。
  • 因此,该笔交易的利润为 5 - 1 - 1 = 3。
  • 继续进行交易无法获得更高利润。能够获得的最大利润为 3。

示例 3:

输入: prices = [4,1,7], cooldown = 2, costs = [3,0,1]

输出: 6

解释:

最优策略如下:

  • 在第 1 天以 prices[1] = 1 的价格买入。
  • 在第 2 天以 prices[2] = 7 的价格卖出。持有时长为 1 天,因此持有费用为 costs[1] = 0。
  • 该笔交易的利润为 7 - 1 - 0 = 6。
  • 之后无法再进行更多交易。能够获得的最大利润为 6。

示例 4:

输入: prices = [3,1,4], cooldown = 0, costs = [2,1,0]

输出: 2

解释:

最优策略如下:

  • 在第 1 天以 prices[1] = 1 的价格买入。
  • 在第 2 天以 prices[2] = 4 的价格卖出。持有时长为 1 天,因此持有费用为 costs[1] = 1。
  • 因此,该笔交易的利润为 4 - 1 - 1 = 2。
  • 继续进行交易无法获得更高利润。能够获得的最大利润为 2。

 

提示:

  • 1 <= n == prices.length <= 1500
  • 1 <= prices[i] <= 105
  • 0 <= cooldown <= n - 1
  • costs.length == n
  • 0 <= costs[i] <= 105

解法

方法一

1

1

1

1

评论