假设我们有一个按时间顺序排列的公司股价列表,并且也有一个卖出交易的交易费用。我们必须找到通过多次买卖该股票所能获得的最大利润。我们必须先购买,然后才能出售。
因此,如果输入像价格= [2、10、4、8]费用= 3,那么输出将是6,因为我们可以在2买入并在10卖出并产生3的费用,所以利润是5 。然后我们在4买入,在8卖出,产生3的费用,因此获利1,总获利6。
为了解决这个问题,我们将遵循以下步骤:
n:=价格大小
定义一个功能recur()
。这将需要i:= 0和flag:= 0
如果我和n相同
返回0
如果标志为假,则
返回recur(i + 1,1)-price [i]和recur(i + 1,0)的最大值
返回recur(i + 1,1)和recur(i + 1,0)+价格的最大值[i]-费用
从主方法调用 recur()
让我们看下面的实现以更好地理解:
class Solution: def solve(self, prices, fee): n = len(prices) def recur(i=0, flag=0): if i == n: return 0 if not flag: return max(recur(i + 1, 1) - prices[i], recur(i + 1, 0)) return max(recur(i + 1, 1), recur(i + 1, 0) + prices[i] - fee) return recur()ob = Solution()prices = [2, 10, 4, 8] fee = 3 print(ob.solve(prices, fee))
[2, 10, 4, 8], 3
输出结果
6