Bird
Raised Fist0
DSA Javascriptprogramming~20 mins

Next Greater Element Using Stack in DSA Javascript - Practice Problems & Challenges

Choose your learning style10 modes available
Challenge - 5 Problems
🎖️
Next Greater Element Master
Get all challenges correct to earn this badge!
Test your skills under time pressure!
❓ Predict Output
intermediate
2:00remaining
Output of Next Greater Element for a simple array
What is the output of the following JavaScript code that finds the next greater element for each item in the array?
DSA Javascript
function nextGreaterElement(arr) {
  const stack = [];
  const result = new Array(arr.length).fill(-1);
  for (let i = 0; i < arr.length; i++) {
    while (stack.length && arr[stack[stack.length - 1]] < arr[i]) {
      const idx = stack.pop();
      result[idx] = arr[i];
    }
    stack.push(i);
  }
  return result;
}

console.log(nextGreaterElement([2, 1, 3]));
A[3, 3, -1]
B[1, 3, -1]
C[-1, -1, -1]
D[3, -1, -1]
Attempts:
2 left
💡 Hint
Think about how the stack helps track indices waiting for a bigger number.
❓ Predict Output
intermediate
2:00remaining
Next Greater Element output for descending array
What will be the output of the next greater element function when the input array is strictly descending?
DSA Javascript
function nextGreaterElement(arr) {
  const stack = [];
  const result = new Array(arr.length).fill(-1);
  for (let i = 0; i < arr.length; i++) {
    while (stack.length && arr[stack[stack.length - 1]] < arr[i]) {
      const idx = stack.pop();
      result[idx] = arr[i];
    }
    stack.push(i);
  }
  return result;
}

console.log(nextGreaterElement([5, 4, 3, 2, 1]));
A[4, 3, 2, 1, -1]
B[5, 5, 5, 5, -1]
C[-1, -1, -1, -1, -1]
D[4, 5, 3, 2, 1]
Attempts:
2 left
💡 Hint
In a descending array, no element has a greater element to its right.
🔧 Debug
advanced
2:00remaining
Identify the error in Next Greater Element implementation
What error will the following code produce when run, and why?
DSA Javascript
function nextGreaterElement(arr) {
  const stack = [];
  const result = new Array(arr.length).fill(-1);
  for (let i = 0; i <= arr.length; i++) {
    while (stack.length && arr[stack[stack.length - 1]] < arr[i]) {
      const idx = stack.pop();
      result[idx] = arr[i];
    }
    stack.push(i);
  }
  return result;
}

console.log(nextGreaterElement([1, 2, 3]));
A[2, 3, -1]
BTypeError: Cannot read property 'undefined' of undefined
CSyntaxError: Unexpected token
D[3, 3, -1]
Attempts:
2 left
💡 Hint
Check the loop boundary and array access inside the loop.
🧠 Conceptual
advanced
2:00remaining
Stack usage in Next Greater Element algorithm
Why does the Next Greater Element algorithm use a stack to store indices instead of values directly?
ABecause indices allow updating the result array at the correct positions after finding the next greater element.
BBecause values can be duplicated and cause confusion in the stack.
CBecause JavaScript stacks only accept numbers as indices.
DBecause storing values would require more memory than storing indices.
Attempts:
2 left
💡 Hint
Think about how the result array is updated.
❓ Predict Output
expert
3:00remaining
Next Greater Element output for circular array
What is the output of the following code that finds the next greater element in a circular array?
DSA Javascript
function nextGreaterElementCircular(arr) {
  const n = arr.length;
  const result = new Array(n).fill(-1);
  const stack = [];
  for (let i = 0; i < 2 * n; i++) {
    const current = arr[i % n];
    while (stack.length && arr[stack[stack.length - 1]] < current) {
      const idx = stack.pop();
      result[idx] = current;
    }
    if (i < n) stack.push(i);
  }
  return result;
}

console.log(nextGreaterElementCircular([1, 2, 1]));
A[-1, -1, -1]
B[2, 1, -1]
C[1, 2, 1]
D[2, -1, 2]
Attempts:
2 left
💡 Hint
Remember the array is circular, so elements after the end wrap around to the start.

Practice

(1/5)
1. What does the "Next Greater Element" problem using a stack find for each element in an array?
easy
A. The sum of all elements greater than the current element
B. The first smaller element to the left of each element
C. The last element in the array
D. The first greater element to the right of each element

Solution

  1. Step 1: Understand the problem goal

    The Next Greater Element problem asks to find, for each element, the first element to its right that is greater than it.
  2. Step 2: Recognize the role of the stack

    A stack helps track elements waiting for their next greater element to appear on the right.
  3. Final Answer:

    The first greater element to the right of each element -> Option D
  4. Quick Check:

    Next Greater Element = first bigger right element [OK]
Hint: Look right for first bigger number using stack [OK]
Common Mistakes:
  • Confusing next greater with next smaller element
  • Looking to the left instead of right
  • Thinking it sums elements instead of finding one
2. Which of the following is the correct way to initialize an empty stack in JavaScript for solving Next Greater Element?
easy
A. const stack = null;
B. const stack = {};
C. const stack = [];
D. const stack = 0;

Solution

  1. Step 1: Identify stack data structure in JavaScript

    Stacks are commonly implemented using arrays in JavaScript, so initializing with [] is correct.
  2. Step 2: Check other options

    { } is an object, null is no value, 0 is a number, none suitable for stack operations.
  3. Final Answer:

    const stack = []; -> Option C
  4. Quick Check:

    Stack = array [] for push/pop [OK]
Hint: Use array [] for stack in JavaScript [OK]
Common Mistakes:
  • Using object {} instead of array
  • Assigning null or number instead of array
  • Not initializing stack before use
3. What is the output of the Next Greater Element array for input [4, 5, 2, 25]?
medium
A. [-1, -1, -1, -1]
B. [5, 25, 25, -1]
C. [25, 25, -1, -1]
D. [5, 2, 25, -1]

Solution

  1. Step 1: Find next greater for each element

    4's next greater is 5, 5's next greater is 25, 2's next greater is 25, 25 has none so -1.
  2. Step 2: Write output array

    The output array is [5, 25, 25, -1].
  3. Final Answer:

    [5, 25, 25, -1] -> Option B
  4. Quick Check:

    Next Greater Element for [4,5,2,25] = [5,25,25,-1] [OK]
Hint: Check each element's right side for first bigger number [OK]
Common Mistakes:
  • Assigning smaller or equal numbers as next greater
  • Using -1 for elements that do have greater elements
  • Mixing order of output array
4. Given the code snippet below, what is the bug that prevents correct Next Greater Element output?
function nextGreater(arr) {
  const stack = [];
  const result = new Array(arr.length).fill(-1);
  for (let i = 0; i <= arr.length; i++) {
    while (stack.length && arr[i] > arr[stack[stack.length - 1]]) {
      const idx = stack.pop();
      result[idx] = arr[i];
    }
    stack.push(i);
  }
  return result;
}
medium
A. Loop condition should be i < arr.length, not i <= arr.length
B. Stack should be initialized with arr values, not empty
C. Result array should be filled with zeros, not -1
D. Push should add arr[i], not index i

Solution

  1. Step 1: Check loop boundary

    The loop runs from i = 0 to i <= arr.length, which causes arr[i] to be undefined at i = arr.length, causing errors.
  2. Step 2: Correct loop condition

    Change to i < arr.length to avoid out-of-bound access and fix logic.
  3. Final Answer:

    Loop condition should be i < arr.length, not i <= arr.length -> Option A
  4. Quick Check:

    Loop index must be within array length [OK]
Hint: Use i < arr.length to avoid undefined access [OK]
Common Mistakes:
  • Using <= instead of < in loop condition
  • Pushing values instead of indices to stack
  • Filling result with wrong default values
5. You have an array [13, 7, 6, 12]. Using the Next Greater Element approach with a stack, what is the final output array?
hard
A. [ -1, 12, 12, -1 ]
B. [ -1, 13, 12, -1 ]
C. [ -1, -1, 12, -1 ]
D. [ 7, 6, 12, -1 ]

Solution

  1. Step 1: Find next greater for each element

    13 has no greater element to the right, so -1. 7's next greater is 12. 6's next greater is 12. 12 has none, so -1.
  2. Step 2: Check if any element has a greater element before it

    13 is greater than 7 and 6, so their next greater is 12, but 7's next greater is 12, not 13. 13 itself has no greater element.
  3. Step 3: Confirm output array

    The output is [-1, 12, 12, -1].
  4. Final Answer:

    [-1, 12, 12, -1] -> Option A
  5. Quick Check:

    Next Greater Element for [13,7,6,12] = [-1,12,12,-1] [OK]
Hint: Check right side for first bigger number, use stack to track indices [OK]
Common Mistakes:
  • Assigning previous greater 13 instead of next greater 12 for 7
  • Confusing next greater with previous greater
  • Mixing output order
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