Bird
Raised Fist0
DSA Cprogramming~5 mins

Buy and Sell Stocks All Variants in DSA C - Time & Space Complexity

Choose your learning style10 modes available
Time Complexity: Buy and Sell Stocks All Variants
O(n)
Understanding Time Complexity

When solving buy and sell stock problems, we want to know how the time needed changes as the number of days grows.

We ask: How does the number of price checks and decisions grow with more days?

Scenario Under Consideration

Analyze the time complexity of the following code snippet.


int maxProfit(int* prices, int pricesSize) {
    int minPrice = prices[0];
    int maxProfit = 0;
    for (int i = 1; i < pricesSize; i++) {
        if (prices[i] < minPrice) {
            minPrice = prices[i];
        } else if (prices[i] - minPrice > maxProfit) {
            maxProfit = prices[i] - minPrice;
        }
    }
    return maxProfit;
}
    

This code finds the best single buy and sell day to maximize profit from stock prices over days.

Identify Repeating Operations

Identify the loops, recursion, array traversals that repeat.

  • Primary operation: One loop that goes through the price list once.
  • How many times: Exactly once for each day after the first.
How Execution Grows With Input

As the number of days increases, the code checks each day's price once.

Input Size (n)Approx. Operations
10About 9 checks
100About 99 checks
1000About 999 checks

Pattern observation: The number of operations grows directly with the number of days.

Final Time Complexity

Time Complexity: O(n)

This means the time needed grows in a straight line with the number of days.

Common Mistake

[X] Wrong: "Checking every pair of buy and sell days is needed to find max profit."

[OK] Correct: This would take much longer, but the smart one-pass method finds the answer by remembering the lowest price so far.

Interview Connect

Understanding how to scan prices once and keep track of key values shows you can write efficient code, a skill interviewers appreciate.

Self-Check

"What if we allowed multiple buy and sell transactions? How would the time complexity change?"

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