假设我们有一个按时间顺序排列的公司股价列表,我们必须找到可以通过买卖股票获得的最大利润。我们必须在买入之前买入,并且必须在卖出股票后等待一天才能再次买入。
因此,如果输入就像价格= [2、6、9、4、11],那么输出将是11,因为我们可以在2买入,然后在6卖出,等待一天,然后在4买入,然后以11。
为了解决这个问题,我们将按照以下步骤操作:
s:= 0
b:=-无穷大
对于价格范围为0的i,
s:= s和(temp + price [i-1])的最大值
温度:= b
b:= b和(s-价格[i])的最大值
如果我不为零,则
返回s和(b +价格的最后一个元素)的最大值
让我们看下面的实现以更好地理解:
class Solution: def solve(self, prices): s = 0 b = float("-inf") for i in range(len(prices)): temp = b b = max(b, s - prices[i]) if i: s = max(s, temp + prices[i - 1]) return max(s, b + prices[-1]) ob = Solution()prices = [2, 6, 9, 4, 11] print(ob.solve(prices))
[2, 6, 9, 4, 11]
输出结果
11