Bird
Raised Fist0
DSA Cprogramming~5 mins

Stock Span Problem Using Stack in DSA C - Cheat Sheet & Quick Revision

Choose your learning style10 modes available
Recall & Review
beginner
What is the Stock Span Problem?
It is a problem where for each day, we find how many consecutive previous days had stock prices less than or equal to the current day's price.
Click to reveal answer
intermediate
Why do we use a stack to solve the Stock Span Problem?
A stack helps keep track of previous days with higher stock prices efficiently, allowing us to find spans in O(n) time instead of O(n²).
Click to reveal answer
intermediate
What does each element in the stack represent in the Stock Span Problem?
Each element in the stack stores the index of a day with a stock price greater than the current day's price.
Click to reveal answer
intermediate
How is the span for a day calculated using the stack?
Span = current day index - index of last higher price day (top of stack) or current day index + 1 if stack is empty.
Click to reveal answer
intermediate
What is the time complexity of the Stock Span Problem solution using a stack?
The time complexity is O(n) because each element is pushed and popped at most once.
Click to reveal answer
What does the stack store in the Stock Span Problem?
AStock prices themselves
BIndices of days with higher stock prices
CSpan values
DSum of stock prices
If the stack is empty when calculating span for day i, what is the span?
Ai + 1
B0
C1
Di
What is the worst-case time complexity of the naive Stock Span solution without stack?
AO(n²)
BO(n log n)
CO(n)
DO(log n)
What operation is performed on the stack when current day's price is higher than top of stack's day price?
ADo nothing
BPush current day index
CPop from stack
DClear stack
What data structure is best suited for solving the Stock Span Problem efficiently?
AArray only
BQueue
CLinked List
DStack
Explain how the stack helps in calculating the stock span for each day.
Think about how to find the last day with a higher price before the current day.
You got /4 concepts.
    Describe the step-by-step process to solve the Stock Span Problem using a stack.
    Focus on how the stack changes as you move through days.
    You got /5 concepts.

      Practice

      (1/5)
      1. What does the Stock Span Problem calculate for each day in a list of stock prices?
      easy
      A. The maximum stock price in the entire list
      B. The number of consecutive days before the current day with a price less than or equal to the current day's price
      C. The difference between the highest and lowest stock price
      D. The total sum of stock prices up to the current day

      Solution

      1. Step 1: Understand the problem definition

        The Stock Span Problem finds how many consecutive previous days had stock prices less than or equal to the current day's price.
      2. Step 2: Identify what is calculated for each day

        For each day, it counts the number of consecutive days before it with prices not greater than the current day's price.
      3. Final Answer:

        The number of consecutive days with price less or equal to current day -> Option B
      4. Quick Check:

        Span counts consecutive smaller/equal prices [OK]
      Hint: Span counts consecutive days with price ≤ current day price [OK]
      Common Mistakes:
      • Confusing span with maximum price
      • Calculating total sum instead of span
      • Counting days with price greater than current
      2. Which of the following C code snippets correctly initializes an empty stack for solving the Stock Span Problem?
      easy
      A. int stack[100]; int top = -1;
      B. int stack[] = {0}; int top = 0;
      C. int *stack; top = NULL;
      D. stack = new int[100]; top = -1;

      Solution

      1. Step 1: Identify correct stack initialization in C

        In C, stack is usually an array with an integer top initialized to -1 to indicate empty stack.
      2. Step 2: Check each option

        int stack[100]; int top = -1; correctly declares an int array and sets top to -1. int stack[] = {0}; int top = 0; initializes top to 0 which is incorrect for empty stack. int *stack; top = NULL; uses pointer and NULL incorrectly. stack = new int[100]; top = -1; uses 'new' which is C++ syntax, not C.
      3. Final Answer:

        int stack[100]; int top = -1; -> Option A
      4. Quick Check:

        Array + top = -1 initializes empty stack in C [OK]
      Hint: Use array and top = -1 for empty stack in C [OK]
      Common Mistakes:
      • Using C++ 'new' keyword in C code
      • Setting top to 0 instead of -1
      • Using uninitialized pointers for stack
      3. What is the output span array for the stock prices [100, 80, 60, 70, 60, 75, 85] using the Stock Span algorithm?
      medium
      A. [1, 1, 1, 2, 1, 4, 6]
      B. [1, 2, 3, 4, 5, 6, 7]
      C. [1, 1, 2, 2, 3, 3, 4]
      D. [1, 1, 1, 1, 1, 1, 1]

      Solution

      1. Step 1: Calculate span for each day

        Day 0: price=100, no previous, span=1
        Day 1: price=80, previous 100 > 80, span=1
        Day 2: price=60, previous 80 > 60, span=1
        Day 3: price=70, previous 60 ≤ 70, span=1+1=2
        Day 4: price=60, previous 70 > 60, span=1
        Day 5: price=75, previous 60 ≤ 75, count 1 (day4), previous 70 ≤ 75, count 2 (day3), previous 60 ≤ 75, count 3 (day2), previous 80 > 75 stop, span=4
        Day 6: price=85, previous 75 ≤ 85, count 1 (day5), previous 60 ≤ 85, count 2 (day4), previous 70 ≤ 85, count 3 (day3), previous 60 ≤ 85, count 4 (day2), previous 80 ≤ 85, count 5 (day1), previous 100 > 85 stop, span=6
      2. Step 2: Write final span array

        The span array is [1, 1, 1, 2, 1, 4, 6].
      3. Final Answer:

        [1, 1, 1, 2, 1, 4, 6] -> Option A
      4. Quick Check:

        Span counts consecutive smaller/equal prices [OK]
      Hint: Count consecutive previous days with price ≤ current day [OK]
      Common Mistakes:
      • Counting all previous days instead of consecutive
      • Ignoring equal prices in span
      • Miscounting span for days with fluctuating prices
      4. Identify the error in the following C code snippet for Stock Span calculation:
      for (int i = 0; i < n; i++) {
        while (top != -1 && prices[stack[top]] <= prices[i]) {
          top--;
        }
        span[i] = (top == -1) ? (i + 1) : (i - stack[top]);
        stack[++top] = i;
      }
      medium
      A. The condition 'top != -1' should be 'top == -1'
      B. The stack push operation should be before calculating span
      C. No error; code correctly calculates the stock span
      D. The comparison operator in while loop should be '<' instead of '<='

      Solution

      1. Step 1: Analyze the while loop condition

        The while loop pops indices from stack while the price at those indices is less than or equal to current price, which is correct for span calculation.
      2. Step 2: Check span calculation and stack push

        Span is set to i+1 if stack empty, else difference between current index and top of stack index. Then current index is pushed. This matches the standard algorithm.
      3. Final Answer:

        No error; code correctly calculates the stock span -> Option C
      4. Quick Check:

        Standard stack-based span algorithm used [OK]
      Hint: Check while condition and span formula carefully [OK]
      Common Mistakes:
      • Changing <= to < breaks span logic
      • Pushing before span calculation causes wrong results
      • Incorrect stack empty condition
      5. Given stock prices [10, 4, 5, 90, 120, 80], how would the Stock Span algorithm change if we want to count days with strictly less price (not less or equal)? What is the resulting span array?
      hard
      A. [1, 1, 2, 4, 5, 2]
      B. [1, 1, 1, 4, 5, 1]
      C. [1, 1, 1, 3, 4, 1]
      D. [1, 1, 2, 4, 5, 1]

      Solution

      1. Step 1: Understand change from ≤ to < in comparison

        Changing from less or equal to strictly less means while popping from stack, we pop only if previous price is strictly less than current price, not equal.
      2. Step 2: Calculate span with strict less condition

        Day 0: 10, span=1
        Day 1: 4, previous 10 > 4, span=1
        Day 2: 5, previous 4 < 5, pop 4, span=2
        Day 3: 90, previous 5 < 90, pop 5; previous 10 < 90, pop 10; stack empty, span=4
        Day 4: 120, previous 90 < 120, pop 90; stack empty, span=5
        Day 5: 80, previous 120 > 80, span=1 (no pop)
        But since we pop only if strictly less, equal prices would not pop. Here no equal prices affect.
      3. Final Answer:

        [1, 1, 2, 4, 5, 1] -> Option D
      4. Quick Check:

        Strict less changes popping condition, span updated accordingly [OK]
      Hint: Use '<' instead of '<=' in while condition for strict less [OK]
      Common Mistakes:
      • Not updating while condition correctly
      • Miscounting span for last day
      • Assuming equal prices pop stack
      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