Seawolf 发表于 2020-9-10 22:48:19

Leetcode 123. Best Time to Buy and Sell Stock III

Say you have an array for which the ith element is the price of a given stock on day i.

Design an algorithm to find the maximum profit. You may complete at most two transactions.

Note: You may not engage in multiple transactions at the same time (i.e., you must sell the stock before you buy again).



Example 1:

Input: prices =
Output: 6
Explanation: Buy on day 4 (price = 0) and sell on day 6 (price = 3), profit = 3-0 = 3.
Then buy on day 7 (price = 1) and sell on day 8 (price = 4), profit = 4-1 = 3.
Example 2:

Input: prices =
Output: 4
Explanation: Buy on day 1 (price = 1) and sell on day 5 (price = 5), profit = 5-1 = 4.
Note that you cannot buy on day 1, buy on day 2 and sell them later, as you are engaging multiple transactions at the same time. You must sell before buying again.
Example 3:

Input: prices =
Output: 0
Explanation: In this case, no transaction is done, i.e. max profit = 0.
Example 4:

Input: prices =
Output: 0


Constraints:

1 <= prices.length <= 10^5
0 <= prices <= 10^5

class Solution:
    def maxProfit(self, prices: List) -> int:
      if not prices: return 0
      hold_first, sold_first = -math.inf, 0
      hold_second, sold_second = -math.inf, 0
      
      for price in prices:
            hold_first_tmp, sold_first_tmp = hold_first, sold_first
            hold_second_tmp, sold_second_tmp = hold_second, sold_second
            
            hold_first = max(hold_first_tmp, 0 - price)
            sold_first = max(sold_first_tmp, hold_first_tmp + price)
            hold_second = max(hold_second_tmp, sold_first - price)
            sold_second = max(sold_second_tmp, hold_second_tmp + price)
      
      return sold_second
页: [1]
查看完整版本: Leetcode 123. Best Time to Buy and Sell Stock III