Bird
Raised Fist0
DSA Cprogramming~5 mins

Buy and Sell Stocks All Variants in DSA C - Cheat Sheet & Quick Revision

Choose your learning style10 modes available
Recall & Review
beginner
What is the main goal in the 'Buy and Sell Stocks' problem?
To find the maximum profit by choosing the best days to buy and sell stocks given their prices over time.
Click to reveal answer
beginner
In the single transaction variant, what is the key idea to find maximum profit?
Track the minimum price seen so far and calculate the profit if sold today; update max profit accordingly.
Click to reveal answer
intermediate
How does the multiple transactions variant differ from the single transaction variant?
You can buy and sell multiple times, so the goal is to sum all positive price differences between consecutive days.
Click to reveal answer
intermediate
What constraint does the 'at most two transactions' variant add?
You can complete at most two buy-sell transactions to maximize profit, requiring tracking profits from left and right passes.
Click to reveal answer
advanced
Why is dynamic programming useful in the 'Buy and Sell Stocks with cooldown' variant?
Because you must consider cooldown days after selling, DP helps track states like holding, sold, and cooldown to maximize profit.
Click to reveal answer
In the single transaction stock problem, what do you track to find max profit?
AMaximum price so far only
BMinimum price so far and max profit
CSum of all prices
DNumber of transactions
For multiple transactions allowed, how do you calculate max profit?
ASum all positive differences between consecutive days
BBuy on first day, sell on last day
COnly one transaction allowed
DIgnore price drops
What is the main challenge in the 'at most two transactions' variant?
ANo transactions allowed
BOnly one transaction allowed
CTracking profits from two separate transactions efficiently
DIgnoring price changes
In the cooldown variant, what happens after selling a stock?
AYou must wait one day before buying again
BYou can buy immediately
CYou cannot buy ever again
DYou must sell again immediately
Which approach is best for solving complex variants like cooldown or transaction limits?
AGreedy without tracking states
BBrute Force
CSorting prices
DDynamic Programming
Explain how to find maximum profit with only one buy and one sell allowed.
Think about the lowest price before the current day.
You got /3 concepts.
    Describe the difference between multiple transactions allowed and cooldown variants.
    Cooldown adds waiting days after selling.
    You got /3 concepts.

      Practice

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

      Solution

      1. Step 1: Understand the problem objective

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

        Choosing the best days to buy low and sell high maximizes profit.
      3. Final Answer:

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

        Goal = Maximize profit [OK]
      Hint: Focus on maximizing profit, not just counting days [OK]
      Common Mistakes:
      • Confusing profit maximization with minimizing transactions
      • Ignoring the selling day after buying
      • Thinking only about highest price day
      2. Which of the following C code snippets correctly initializes the variable to track maximum profit as zero?
      easy
      A. int maxProfit = 0;
      B. int maxProfit = -1;
      C. int maxProfit = NULL;
      D. int maxProfit = '0';

      Solution

      1. Step 1: Check variable initialization syntax

        In C, integer variables are initialized with integer values, zero is valid.
      2. Step 2: Validate each option

        int maxProfit = 0; uses int maxProfit = 0; which is correct. int maxProfit = -1; uses -1 which is valid but not typical for profit initialization. int maxProfit = NULL; uses NULL which is for pointers, not int. int maxProfit = '0'; uses character '0' which is ASCII 48, not zero.
      3. Final Answer:

        int maxProfit = 0; -> Option A
      4. Quick Check:

        Correct int initialization = int maxProfit = 0; [OK]
      Hint: Use zero integer for profit start, not NULL or char [OK]
      Common Mistakes:
      • Using NULL for integer variables
      • Initializing with character '0' instead of number 0
      • Starting profit with negative values unnecessarily
      3. What will be the output of the following C code that finds max profit with one transaction?
      int prices[] = {7, 1, 5, 3, 6, 4};
      int maxProfit = 0, minPrice = prices[0];
      for (int i = 1; i < 6; i++) {
          if (prices[i] < minPrice) minPrice = prices[i];
          else if (prices[i] - minPrice > maxProfit) maxProfit = prices[i] - minPrice;
      }
      printf("%d", maxProfit);
      medium
      A. 4
      B. 5
      C. 6
      D. 7

      Solution

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

        Start minPrice=7, maxProfit=0. Iterations:
        i=1: price=1 < 7, minPrice=1
        i=2: price=5, profit=5-1=4 > 0, maxProfit=4
        i=3: price=3, profit=3-1=2 < 4, no change
        i=4: price=6, profit=6-1=5 > 4, maxProfit=5
        i=5: price=4, profit=4-1=3 < 5, no change
      2. Step 2: Final maxProfit after loop

        maxProfit is 5 after all iterations.
      3. Final Answer:

        5 -> Option B
      4. Quick Check:

        Max profit = 5 [OK]
      Hint: Track min price and update max profit on each day [OK]
      Common Mistakes:
      • Not updating minPrice correctly
      • Calculating profit before updating minPrice
      • Confusing maxProfit with max price
      4. Identify the bug in this C code snippet that tries to calculate max profit with unlimited transactions:
      int maxProfit = 0;
      int prices[] = {1, 2, 3, 4, 5};
      for (int i = 0; i < 5; i++) {
          if (prices[i] > prices[i-1]) {
              maxProfit += prices[i] - prices[i-1];
          }
      }
      printf("%d", maxProfit);
      medium
      A. The condition should be prices[i] < prices[i-1]
      B. maxProfit should be initialized to -1
      C. Loop starts at i=0 causing out-of-bounds access at prices[i-1]
      D. The array size is incorrect

      Solution

      1. Step 1: Analyze loop index usage

        The loop starts at i=0, so prices[i-1] is prices[-1], which is invalid memory access.
      2. Step 2: Correct the loop start

        Loop should start at i=1 to safely access prices[i-1].
      3. Final Answer:

        Loop starts at i=0 causing out-of-bounds access at prices[i-1] -> Option C
      4. Quick Check:

        Index error at i=0 [OK]
      Hint: Start loop from 1 when accessing previous element [OK]
      Common Mistakes:
      • Starting loop at 0 when accessing i-1
      • Incorrect comparison operator in if condition
      • Ignoring array bounds
      5. Given the prices array {3, 3, 5, 0, 0, 3, 1, 4}, what is the maximum profit with at most two transactions?
      hard
      A. 8
      B. 6
      C. 5
      D. 7

      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 for two transactions

        First transaction: buy at 3 (day 0), sell at 5 (day 2), profit = 2.
        Second transaction: buy at 0 (day 3), sell at 4 (day 7), profit = 4.
        Total profit = 2 + 4 = 6.
      3. Step 3: Check for better transactions

        Alternatively, buy at 0 (day 3), sell at 3 (day 5), profit = 3.
        Then buy at 1 (day 6), sell at 4 (day 7), profit = 3.
        Total profit = 3 + 3 = 6.
        But better is buy at 0 (day 3), sell at 5 (day 2) is invalid (sell before buy). So best is 6 or 7 or 8?
        Actually, the maximum profit with two transactions is 7:
        Buy at 0 (day 3), sell at 3 (day 5), profit = 3.
        Buy at 1 (day 6), sell at 4 (day 7), profit = 3.
        Total profit = 6.
        But if we consider buy at 3 (day 0), sell at 5 (day 2), profit = 2.
        Buy at 0 (day 3), sell at 4 (day 7), profit = 4.
        Total profit = 6.
        However, the maximum profit is 7:
        Buy at 0 (day 3), sell at 5 (day 2) invalid.
        Buy at 0 (day 3), sell at 4 (day 7), profit = 4.
        Buy at 1 (day 6), sell at 4 (day 7), profit = 3.
        Total profit = 7.
        So the correct maximum profit is 7.
      4. Final Answer:

        7 -> Option D
      5. Quick Check:

        Two transactions max profit = 7 [OK]
      Hint: Split array, find max profit left and right, sum max [OK]
      Common Mistakes:
      • Counting overlapping transactions
      • Ignoring zero price days
      • Assuming unlimited transactions
      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