Buy and Sell Stocks All Variants in DSA Java - Time & Space Complexity
We analyze how the time needed to find the best buy and sell days grows as the list of stock prices grows.
We want to know how the number of price checks changes when we have more days.
Analyze the time complexity of the following code snippet.
public int maxProfit(int[] prices) {
int minPrice = Integer.MAX_VALUE;
int maxProfit = 0;
for (int price : prices) {
if (price < minPrice) {
minPrice = price;
} else if (price - minPrice > maxProfit) {
maxProfit = price - minPrice;
}
}
return maxProfit;
}
This code finds the maximum profit from buying and selling once by scanning prices once.
Identify the loops, recursion, array traversals that repeat.
- Primary operation: One loop through the prices array.
- How many times: Exactly once for each price (n times).
As the number of days (prices) increases, the number of checks grows directly with it.
| Input Size (n) | Approx. Operations |
|---|---|
| 10 | 10 checks |
| 100 | 100 checks |
| 1000 | 1000 checks |
Pattern observation: The work grows in a straight line with input size.
Time Complexity: O(n)
This means the time to find the best buy and sell days grows directly with the number of days.
[X] Wrong: "We need to check every pair of days to find max profit, so it must be O(n²)."
[OK] Correct: This code smartly tracks the lowest price so far and calculates profit in one pass, avoiding nested loops.
Understanding this pattern shows you can optimize by avoiding unnecessary repeated checks, a key skill in coding interviews.
"What if we wanted to allow multiple buy and sell transactions? How would the time complexity change?"
Practice
Buy and Sell Stocks problem?Solution
Step 1: Understand the problem goal
The problem asks to maximize profit by buying low and selling high on different days.Step 2: Identify the correct objective
Maximizing profit means choosing the best buy and sell days, not minimizing transactions or finding averages.Final Answer:
Maximize the profit by choosing the best days to buy and sell stocks -> Option CQuick Check:
Goal = Maximize profit [OK]
- Confusing profit maximization with minimizing transactions
- Thinking the goal is to find highest price day only
- Ignoring the buy day before sell day order
Solution
Step 1: Check Java array initialization syntax
Java arrays are initialized with curly braces {} and type declaration with [] after type.Step 2: Validate each option
Parentheses () are invalid, square brackets [] for values are invalid, missing braces {} and improper assignment are invalid. int[] prices = {7, 1, 5, 3, 6}; uses correct syntax.Final Answer:
int[] prices = {7, 1, 5, 3, 6}; -> Option AQuick Check:
Correct array syntax = int[] prices = {7, 1, 5, 3, 6}; [OK]
- Using square brackets [] for values instead of curly braces
- Missing type[] before variable name
- Using parentheses () instead of braces
int[] prices = {7, 1, 5, 3, 6, 4};
int minPrice = Integer.MAX_VALUE;
int maxProfit = 0;
for (int price : prices) {
if (price < minPrice) minPrice = price;
else if (price - minPrice > maxProfit) maxProfit = price - minPrice;
}
System.out.println(maxProfit);Solution
Step 1: Track minimum price and max profit during iteration
Prices: 7,1,5,3,6,4. minPrice updates to 7 then 1. maxProfit updates when price - minPrice is greater.Step 2: Calculate max profit step-by-step
At price=5, profit=5-1=4; maxProfit=4. At price=6, profit=6-1=5; maxProfit=5. At price=4, profit=4-1=3; maxProfit stays 5.Final Answer:
5 -> Option AQuick Check:
Max profit = 6 - 1 = 5 [OK]
- Confusing max profit with max price
- Not updating minPrice correctly
- Calculating profit without checking minPrice
int maxProfit = 0;
for (int i = 1; i < prices.length; i++) {
if (prices[i] > prices[i - 1])
maxProfit += prices[i] - prices[i - 1];
else
i++;
}
System.out.println(maxProfit);Solution
Step 1: Analyze loop increment and conditions
The loop increments i each iteration, but inside else block it increments i again causing skipping elements.Step 2: Identify why extra increment causes error
Extra i++ skips days, missing some profit opportunities and causing incorrect result.Final Answer:
Incorrect increment of loop variable inside else block -> Option DQuick Check:
Loop variable increment only once per iteration [OK]
- Incrementing loop variable twice causing skips
- Starting loop from wrong index
- Confusing price indices in calculation
Solution
Step 1: Understand the two transaction constraint
At most two transactions means we can buy and sell twice, but transactions cannot overlap.Step 2: Use two-pass approach for max profit calculation
First pass calculates max profit from day 0 to i, second pass calculates max profit from i to end. Combining these gives max profit with two transactions.Final Answer:
Use two passes: first pass calculates max profit up to each day, second pass calculates max profit from each day to end, then combine. -> Option BQuick Check:
Two-pass method = Use two passes: first pass calculates max profit up to each day, second pass calculates max profit from each day to end, then combine. [OK]
- Sorting prices loses day order information
- Summing all positive differences allows unlimited transactions
- Ignoring transaction count limit
Ready to prove it?
Pass the test and this pattern moves unknown
