19. Stock Buy and Sell – Max K Transactions Allowed
The problem can be found at the following link: Question Link
Problem Description
In the stock market, a person can buy a stock and sell it on a future date. You are given an array prices[] representing stock prices on different days and a positive integer k.
Find out the maximum profit a person can make with at most k transactions.
A transaction consists of buying and subsequently selling a stock. A new transaction can only start after completing the previous one.
Examples
Example 1:
Input:
prices = [10, 22, 5, 80]
k = 2Output:
87Explanation:
Buy at 10, Sell at 22 → Profit = 12
Buy at 5, Sell at 80 → Profit = 75 Total Profit = 12 + 75 = 87
Example 2:
Input:
Output:
Explanation:
Buy at 20, Sell at 580 → Profit = 560
Buy at 420, Sell at 900 → Profit = 480 Total Profit = 560 + 480 = 1040
Example 3:
Input:
Output:
Explanation:
The stock price is continuously decreasing, so there is no profit possible.
Constraints:
$(1 \leq \text{prices.size()} \leq 10^3)$
$(1 \leq k \leq 200)$
$(1 \leq \text{prices}[i] \leq 10^3)$
Optimized Dynamic Programming (1D DP, O(K×N) Time, O(2K) Space)
Approach:
If 2 * k >= n, it's optimal to perform all profitable transactions, similar to an unlimited transactions problem.
Otherwise, we use a 1D DP table (
dp[2*k+1]) to store the best profit for different transaction states:Odd indices → Buying states
Even indices → Selling states
Iterate through the stock prices and update
dp[]based on previous values:If buying, maximize profit by either holding or buying today.
If selling, maximize profit by either selling today or holding.
Algorithm Steps:
If
k == 0, return 0 (no transactions allowed).If 2 * k >= n, return the sum of all upward price differences.
Initialize
dp[2*k+1]with-∞for buy states and0for the rest.Iterate through prices and update
dp[j]for all transactions.
Time and Auxiliary Space Complexity
Expected Time Complexity: O(K × N), since we iterate over
prices[]for each transaction.Expected Auxiliary Space Complexity: O(2K), since we only use a
dp[]array of size2K + 1.
Code (C++)
Code (Java)
Code (Python)
Contribution and Support:
For discussions, questions, or doubts related to this solution, feel free to connect on LinkedIn: Any Questions. Let’s make this learning journey more collaborative!
⭐ If you find this helpful, please give this repository a star! ⭐
📍Visitor Count
Last updated