Bird
Raised Fist0
DSA Cprogramming~20 mins

Buy and Sell Stocks All Variants in DSA C - Practice Problems & Challenges

Choose your learning style10 modes available
Challenge - 5 Problems
🎖️
Stock Trading Master
Get all challenges correct to earn this badge!
Test your skills under time pressure!
❓ Predict Output
intermediate
2:00remaining
Output of Single Transaction Maximum Profit
What is the output of the following C code that calculates the maximum profit from a single buy-sell transaction given stock prices?
DSA C
int maxProfit(int* prices, int pricesSize) {
    int minPrice = 2147483647;
    int maxProfit = 0;
    for (int i = 0; i < pricesSize; i++) {
        if (prices[i] < minPrice) {
            minPrice = prices[i];
        } else if (prices[i] - minPrice > maxProfit) {
            maxProfit = prices[i] - minPrice;
        }
    }
    return maxProfit;
}

int main() {
    int prices[] = {7,1,5,3,6,4};
    int result = maxProfit(prices, 6);
    printf("%d\n", result);
    return 0;
}
A5
B4
C6
D7
Attempts:
2 left
💡 Hint
Think about the lowest price before the highest profit.
❓ Predict Output
intermediate
2:00remaining
Output of Multiple Transactions Maximum Profit
What is the output of this C code that calculates the maximum profit from multiple buy-sell transactions (buy and sell multiple times)?
DSA C
int maxProfit(int* prices, int pricesSize) {
    int profit = 0;
    for (int i = 1; i < pricesSize; i++) {
        if (prices[i] > prices[i - 1]) {
            profit += prices[i] - prices[i - 1];
        }
    }
    return profit;
}

int main() {
    int prices[] = {7,1,5,3,6,4};
    int result = maxProfit(prices, 6);
    printf("%d\n", result);
    return 0;
}
A4
B5
C6
D7
Attempts:
2 left
💡 Hint
Sum all positive differences between consecutive days.
❓ Predict Output
advanced
2:30remaining
Output of Maximum Profit with Cooldown
What is the output of this C code that calculates the maximum profit with cooldown (cannot buy on the day after selling)?
DSA C
int maxProfit(int* prices, int pricesSize) {
    if (pricesSize == 0) return 0;
    int sell = 0, prev_sell = 0, buy = -2147483647, prev_buy;
    for (int i = 0; i < pricesSize; i++) {
        prev_buy = buy;
        buy = (prev_sell - prices[i]) > buy ? (prev_sell - prices[i]) : buy;
        prev_sell = sell;
        sell = (prev_buy + prices[i]) > sell ? (prev_buy + prices[i]) : sell;
    }
    return sell;
}

int main() {
    int prices[] = {1,2,3,0,2};
    int result = maxProfit(prices, 5);
    printf("%d\n", result);
    return 0;
}
A5
B4
C3
D2
Attempts:
2 left
💡 Hint
Consider cooldown day after selling.
❓ Predict Output
advanced
2:30remaining
Output of Maximum Profit with Transaction Fee
What is the output of this C code that calculates the maximum profit with a transaction fee for each sell?
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 + prices[i] - fee ? cash : hold + prices[i] - fee;
        hold = hold > cash - prices[i] ? hold : cash - prices[i];
    }
    return cash;
}

int main() {
    int prices[] = {1,3,2,8,4,9};
    int result = maxProfit(prices, 6, 2);
    printf("%d\n", result);
    return 0;
}
A6
B8
C5
D7
Attempts:
2 left
💡 Hint
Subtract fee on each sell transaction.
🧠 Conceptual
expert
3:00remaining
Minimum Number of Transactions for Maximum Profit
Given an array of stock prices, what is the minimum number of transactions needed to achieve the maximum possible profit when multiple transactions are allowed?
ANumber of local minima and maxima pairs
BNumber of all increasing price pairs
CNumber of days minus one
DNumber of price peaks only
Attempts:
2 left
💡 Hint
Think about buying at valleys and selling at peaks.

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