123_Best Time to Buy and Sell Stock III

Say you have an array for which the i_th 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:

Input:
 [3,3,5,0,0,3,1,4]

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.

Solution:

Idea:

  • Divide and Conquer: suppose the first transaction occurs in A[0, i] and the second transaction happens in A[i, n], then the sum of two profits is the total profit for that i.

  • Do a forward loop to compute the highest profit we can get when we sell on each day.

  • Do a backward loop to compute the highest profit we can get when we buy the second share on each day.

Time Complexity: O(n)O(n)

Space Complexity: O(n)O(n)

Last updated

Was this helpful?