Bird
Raised Fist0
DSA Goprogramming~10 mins

Buy and Sell Stocks All Variants in DSA Go - Execution Trace

Choose your learning style10 modes available
Concept Flow - Buy and Sell Stocks All Variants
Start: Prices Array
↓
Choose Variant
↓
One Transaction
↓
Track Min Price
↓
Calculate Max Profit
↓
Return Max Profit
The flow starts with the prices array, then chooses the variant of the problem, and follows the specific steps to calculate max profit accordingly.
Execution Sample
DSA Go
prices := []int{7,1,5,3,6,4}
minPrice := prices[0]
maxProfit := 0
for _, price := range prices {
  if price < minPrice { minPrice = price }
  else if price - minPrice > maxProfit { maxProfit = price - minPrice }
}
This code finds the maximum profit from one buy-sell transaction by tracking the minimum price and updating max profit.
Execution Table
StepOperationCurrent PriceMin PriceMax ProfitVisual State
1Initialize minPrice and maxProfit770[7] minPrice=7, maxProfit=0
2Price=7, price < minPrice?770No change
3Price=1, price < minPrice?110Update minPrice=1
4Price=5, price - minPrice > maxProfit?514Update maxProfit=5-1=4
5Price=3, price - minPrice > maxProfit?314No change
6Price=6, price - minPrice > maxProfit?615Update maxProfit=6-1=5
7Price=4, price - minPrice > maxProfit?415No change
8End of prices array-15Final maxProfit=5
💡 Reached end of prices array, maxProfit holds the maximum profit from one transaction.
Variable Tracker
VariableStartAfter Step 2After Step 3After Step 4After Step 5After Step 6After Step 7Final
minPrice77111111
maxProfit00044555
Current Price-715364-
Key Moments - 3 Insights
Why do we update minPrice only when current price is less than minPrice?
Because buying at the lowest price before selling maximizes profit. See execution_table rows 3 and 4 where minPrice updates to 1, enabling higher profit calculation later.
Why do we check price - minPrice > maxProfit instead of just price > maxProfit?
Because profit depends on the difference between selling price and buying price (minPrice). The check ensures we update maxProfit only when the current transaction yields better profit. See rows 4, 6.
What happens if prices are always decreasing?
maxProfit remains 0 because no profitable transaction exists. The code never updates maxProfit as price - minPrice never exceeds 0. This is shown by no updates in maxProfit in the table.
Visual Quiz - 3 Questions
Test your understanding
Look at the execution_table, what is minPrice after step 3?
A1
B7
C5
D3
💡 Hint
Check the 'Min Price' column at step 3 in execution_table.
At which step does maxProfit first update to 4?
AStep 2
BStep 4
CStep 3
DStep 5
💡 Hint
Look at the 'Max Profit' column in execution_table and find when it changes from 0 to 4.
If the prices array was strictly decreasing, what would maxProfit be at the end?
AGreater than 0
BNegative value
CEqual to 0
DUndefined
💡 Hint
Refer to key_moments explanation about no profitable transaction.
Concept Snapshot
Buy and Sell Stocks Variants:
- Track min price to buy low
- Update max profit when selling price - min price is higher
- Variants include one transaction, multiple transactions, cooldown
- Always return max profit after processing prices
- Handle edge cases like no profit gracefully
Full Transcript
This visualization shows how to find the maximum profit from stock prices by tracking the minimum price seen so far and updating the maximum profit when a better selling price is found. The code iterates through the prices array, updates minPrice when a lower price is found, and updates maxProfit when the current price minus minPrice is greater than the current maxProfit. The execution table traces each step with current price, minPrice, and maxProfit values. Key moments clarify why minPrice updates only on lower prices and why profit is calculated as price difference. The quiz tests understanding of variable changes and edge cases. This approach applies to all variants of the buy and sell stocks problem.

Practice

(1/5)
1. What is the main goal when solving the Buy and Sell Stocks problem variants?
easy
A. Find the day with the highest stock price only
B. Minimize the number of transactions regardless of profit
C. Maximize the profit by choosing the best days to buy and sell stocks
D. Calculate the average stock price over all days

Solution

  1. Step 1: Understand the problem goal

    The problem asks to maximize profit by buying and selling stocks on certain days.
  2. Step 2: Identify the correct objective

    Maximizing profit means choosing days to buy low and sell high, not just counting transactions or prices.
  3. Final Answer:

    Maximize the profit by choosing the best days to buy and sell stocks -> Option C
  4. Quick Check:

    Goal = Maximize profit [OK]
Hint: Focus on profit maximization, not just prices or counts [OK]
Common Mistakes:
  • Confusing profit with number of transactions
  • Thinking only about highest price day
  • Ignoring the buy day in calculations
2. Which of the following Go code snippets correctly initializes a slice to store stock prices for 5 days?
easy
A. prices := []int{7, 1, 5, 3, 6}
B. prices := [5]int{7, 1, 5, 3, 6}
C. prices := make([]int, 5, 5)
D. prices := new([]int{7, 1, 5, 3, 6})

Solution

  1. Step 1: Understand slice initialization in Go

    To create a slice with values, use the literal syntax: []int{values}.
  2. Step 2: Check each option

    prices := []int{7, 1, 5, 3, 6} correctly creates a slice with given values. prices := [5]int{7, 1, 5, 3, 6} creates an array, not a slice. prices := make([]int, 5, 5) creates an empty slice of length 5 but no values. prices := new([]int{7, 1, 5, 3, 6}) is invalid syntax.
  3. Final Answer:

    prices := []int{7, 1, 5, 3, 6} -> Option A
  4. Quick Check:

    Slice literal = []int{values} [OK]
Hint: Use []int{...} to create slices with values directly [OK]
Common Mistakes:
  • Using array syntax instead of slice
  • Using new() incorrectly for slices
  • Creating empty slices without values
3. What is the output of the following Go code that finds the max profit with only one transaction?
func maxProfit(prices []int) int {
    minPrice := prices[0]
    maxProfit := 0
    for _, price := range prices {
        if price < minPrice {
            minPrice = price
        } else if price - minPrice > maxProfit {
            maxProfit = price - minPrice
        }
    }
    return maxProfit
}

fmt.Println(maxProfit([]int{7,1,5,3,6,4}))
medium
A. 5
B. 6
C. 4
D. 7

Solution

  1. Step 1: Trace the loop to find minPrice and maxProfit

    Start minPrice=7, maxProfit=0. Iterate prices: - price=7: minPrice=7, maxProfit=0 - price=1: minPrice=1 (lower) - price=5: profit=5-1=4 >0, maxProfit=4 - price=3: profit=3-1=2 <4, maxProfit=4 - price=6: profit=6-1=5 >4, maxProfit=5 - price=4: profit=4-1=3 <5, maxProfit=5
  2. Step 2: Return maxProfit

    maxProfit is 5 after loop ends.
  3. Final Answer:

    5 -> Option A
  4. Quick Check:

    Max profit = 5 [OK]
Hint: Track min price and update max profit during iteration [OK]
Common Mistakes:
  • Not updating minPrice correctly
  • Calculating profit before updating minPrice
  • Returning wrong variable
4. Identify the bug in this Go function that tries to calculate max profit with unlimited transactions:
func maxProfit(prices []int) int {
    profit := 0
    for i := 0; i < len(prices); i++ {
        if prices[i] > prices[i-1] {
            profit += prices[i] - prices[i-1]
        }
    }
    return profit
}
medium
A. prices slice is not initialized
B. Incorrect profit calculation logic
C. Missing return statement
D. Index out of range error due to accessing prices[i-1] when i=0

Solution

  1. Step 1: Check loop and index usage

    The loop starts at i=0, but code accesses prices[i-1], which is prices[-1] at i=0, causing index out of range error.
  2. Step 2: Identify fix

    Start loop from i=1 to avoid negative index access.
  3. Final Answer:

    Index out of range error due to accessing prices[i-1] when i=0 -> Option D
  4. Quick Check:

    Loop index must start at 1 to avoid error [OK]
Hint: Avoid negative indices by starting loop at 1 [OK]
Common Mistakes:
  • Starting loop at 0 but accessing i-1
  • Ignoring runtime errors
  • Not testing with small input arrays
5. Given the prices [3, 3, 5, 0, 0, 3, 1, 4], what is the maximum profit with at most two transactions?
hard
A. 7
B. 6
C. 5
D. 8

Solution

  1. Step 1: Understand two transactions limit

    We can buy and sell stocks at most twice to maximize profit.
  2. Step 2: Calculate max profit with two transactions

    First transaction: buy at 3, sell at 5 (profit 2) Second transaction: buy at 0, sell at 4 (profit 4) Total profit = 2 + 4 = 6
  3. Final Answer:

    6 -> Option B
  4. Quick Check:

    Two transactions max profit = 6 [OK]
Hint: Split array, find max profit left and right, sum max [OK]
Common Mistakes:
  • Counting overlapping transactions
  • Ignoring zero price days
  • Calculating only one transaction profit
Recommended

Ready to prove it?

Pass the test and this pattern moves unknown strong while earning +1 Grip toward your certificate.

10 questions~5 mineasy hard