WalzoneInterview Prep
📞 Interviewing soon? Practice with a realistic AI mock phone interview — it calls you, then scores you. First 15 min FREE →

Wall Street Quant · Puzzles & Problems · question 23 of 155

You have an array that represents the price of a stock each day for a period of n days. You can make as many transactions as you like, but you can’t engage in multiple transactions at the same time (you must sell the stock before you buy again). Design an algorithm to find the maximum profit.?

📕 Buy this interview preparation book: 155 Wall Street Quant questions & answers — PDF + EPUB for $5

To solve this problem, we can use a dynamic programming approach. We’ll maintain a table ‘dp‘ where ‘dp[i][j]‘ represents the maximum profit that can be obtained up to day ‘i‘ with ‘j‘ transactions. The table can be filled in a bottom-up manner.

Let’s consider the possible scenarios for each cell ‘dp[i][j]‘:

1. No transaction is made on day ‘i‘. In this case, ‘dp[i][j] = dp[i-1][j]‘.

2. The transaction is made on day ‘i‘. In this case, we need to find the day ‘k‘ where the purchase leads to maximum profit, i.e., ‘prices[i] - prices[k] + dp[k-1][j-1]‘ is maximized, where ‘0 <= k <= i - 1‘.

So, we have the following dynamic programming equation:

dp[i][j] = max(dp[i-1][j], prices[i] - prices[k] + dp[k-1][j-1]), 
where `0 <= k <= i - 1`.

Here is the algorithm to find the maximum profit:

1. Initialize a 2D array ‘dp‘ of size ‘n x (t+1)‘ where ‘n‘ represents number of days and ‘t‘ represents maximum transactions allowed. Set ‘dp[0][j] = 0‘ for all ‘0 <= j <= t‘ and ‘dp[i][0] = 0‘ for all ‘0 <= i < n‘.

2. Use nested for-loops to fill the ‘dp‘ table using the dynamic programming equation above.

3. The maximum profit would be the value at ‘dp[n-1][t]‘.

Here is the Python code for the algorithm:

def max_profit(prices, t):
    n = len(prices)
    
    # Create the dp table
    dp = [[0] * (t+1) for _ in range(n)]

    for i in range(1, n):
        for j in range(1, t+1):
            max_val = float('-inf')
            for k in range(i):
                max_val = max(max_val, prices[i] - prices[k] + dp[k-1][j-1])
            dp[i][j] = max(dp[i-1][j], max_val)

    return dp[n-1][t]

Example:

prices = [3, 3, 5, 0, 0, 3, 1, 4]
t = 2
print(max_profit(prices, t))  # Output: 6

The time complexity of this algorithm is O(n * t * n) = O(n2 * t) and the space complexity is O(n * t).

Reading is step one. Saying it out loud is the interview. Our AI interviewer calls your phone and runs a realistic Wall Street Quant interview — then scores it.
📞 Practice Wall Street Quant — free 15 min
📕 Buy this interview preparation book: 155 Wall Street Quant questions & answers — PDF + EPUB for $5

All 155 Wall Street Quant questions · All topics