Bird
Raised Fist0
DSA Cprogramming~10 mins

Buy and Sell Stocks All Variants in DSA C - Interactive Practice

Choose your learning style10 modes available
Practice - 5 Tasks
Answer the questions below
1fill in blank
easy

Complete the code to find the maximum profit from a single buy and sell.

DSA C
int maxProfit(int* prices, int pricesSize) {
    int minPrice = prices[0];
    int maxProfit = 0;
    for (int i = 1; i < pricesSize; i++) {
        if (prices[i] < [1]) {
            minPrice = prices[i];
        } else if (prices[i] - minPrice > maxProfit) {
            maxProfit = prices[i] - minPrice;
        }
    }
    return maxProfit;
}
Drag options to blanks, or click blank then click option'
AminPrice
BmaxProfit
CpricesSize
Dprices[0]
Attempts:
3 left
💡 Hint
Common Mistakes
Using maxProfit instead of minPrice in the comparison.
Not updating minPrice correctly.
Starting loop from index 0 instead of 1.
2fill in blank
medium

Complete the code to calculate maximum profit with unlimited transactions.

DSA C
int maxProfit(int* prices, int pricesSize) {
    int profit = 0;
    for (int i = 1; i < pricesSize; i++) {
        if (prices[i] > [1]) {
            profit += prices[i] - prices[i - 1];
        }
    }
    return profit;
}
Drag options to blanks, or click blank then click option'
Aprices[i - 1]
Bprices[i]
CpricesSize
Dprofit
Attempts:
3 left
💡 Hint
Common Mistakes
Comparing prices[i] with prices[i] (always false).
Adding prices[i] instead of difference.
Using wrong index in comparison.
3fill in blank
hard

Fix the error in the code to find max profit with at most two transactions.

DSA C
int maxProfit(int* prices, int pricesSize) {
    int firstBuy = INT_MIN, firstSell = 0;
    int secondBuy = INT_MIN, secondSell = 0;
    for (int i = 0; i < pricesSize; i++) {
        firstBuy = (firstBuy > -prices[i]) ? firstBuy : -prices[i];
        firstSell = (firstSell > firstBuy + prices[i]) ? firstSell : firstBuy + prices[i];
        secondBuy = (secondBuy > firstSell - prices[i]) ? secondBuy : firstSell - prices[i];
        secondSell = (secondSell > secondBuy + [1]) ? secondSell : secondBuy + prices[i];
    }
    return secondSell;
}
Drag options to blanks, or click blank then click option'
AsecondBuy
BfirstSell
Cprices[i]
DfirstBuy
Attempts:
3 left
💡 Hint
Common Mistakes
Adding wrong variable instead of prices[i].
Using wrong comparison operators.
Not initializing variables correctly.
4fill in blank
hard

Fill both blanks to implement max profit with cooldown period.

DSA C
int maxProfit(int* prices, int pricesSize) {
    if (pricesSize == 0) return 0;
    int sell = 0, prevSell = 0, buy = -prices[0], prevBuy;
    for (int i = 1; i < pricesSize; i++) {
        prevBuy = buy;
        buy = (buy > prevSell - [1]) ? buy : prevSell - prices[i];
        prevSell = sell;
        sell = (sell > prevBuy + [2]) ? sell : prevBuy + prices[i];
    }
    return sell;
}
Drag options to blanks, or click blank then click option'
Aprices[i]
Bprices[i - 1]
CpricesSize
DprevSell
Attempts:
3 left
💡 Hint
Common Mistakes
Using prices[i] instead of prices[i - 1] in buy update.
Mixing up buy and sell variables.
Not handling cooldown logic properly.
5fill in blank
hard

Fill all three blanks to implement max profit with transaction fee.

DSA C
int maxProfit(int* prices, int pricesSize, int fee) {
    int cash = 0, hold = -prices[0];
    for (int i = 1; i < pricesSize; i++) {
        cash = (cash > hold + [1]) ? cash : hold + prices[i] - fee;
        hold = (hold > cash - [2]) ? hold : cash - prices[i];
    }
    return cash;
}
Drag options to blanks, or click blank then click option'
Aprices[i]
Bfee
Attempts:
3 left
💡 Hint
Common Mistakes
Subtracting fee when buying instead of selling.
Mixing up prices[i] and fee in updates.
Not updating cash and hold correctly.

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