Bird
Raised Fist0
DSA Javaprogramming~30 mins

Next Greater Element Using Stack in DSA Java - Build from Scratch

Choose your learning style10 modes available
Next Greater Element Using Stack
📖 Scenario: Imagine you have a list of daily temperatures, and you want to find for each day the next day when the temperature will be higher. This helps you plan your activities better.
🎯 Goal: You will build a program that finds the next greater element for each number in an array using a stack. The next greater element for a number is the first greater number to its right in the array. If there is no greater number, the result is -1.
📋 What You'll Learn
Create an integer array called nums with the exact values {4, 5, 2, 25}
Create an integer array called result of the same length as nums
Use a Stack<Integer> called stack to help find the next greater elements
Use a for loop with variable i to iterate over nums
Print the result array in the format: [5, 25, 25, -1]
💡 Why This Matters
🌍 Real World
Finding the next greater element is useful in stock price analysis, weather forecasting, and many other areas where you want to know the next time a value increases.
💼 Career
Understanding stacks and array processing is fundamental for software development roles, especially those involving algorithms and data processing.
Progress0 / 4 steps
1
Create the input array
Create an integer array called nums with the exact values {4, 5, 2, 25}.
DSA Java
Hint

Use int[] nums = {4, 5, 2, 25}; to create the array.

2
Create the result array and stack
Create an integer array called result of the same length as nums and a Stack<Integer> called stack.
DSA Java
Hint

Use new int[nums.length] for the result array and new Stack<>() for the stack.

3
Find next greater elements using stack
Use a for loop with variable i to iterate over nums. Inside the loop, use the stack to find the next greater element for each number and store it in result[i]. If no greater element exists, store -1.
DSA Java
Hint

Loop from the end of the array to the start. Use the stack to keep track of next greater elements.

4
Print the result array
Print the result array in the format [5, 25, 25, -1] using System.out.println.
DSA Java
Hint

Use Arrays.toString(result) inside System.out.println to print the array.

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 first greater element to the right of each element
D. The index of the maximum element in the array

Solution

  1. Step 1: Understand the problem definition

    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: Identify the role of the stack

    The stack helps keep track of elements for which we haven't found a greater element yet, allowing efficient lookup.
  3. Final Answer:

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

    Next Greater Element = first greater right element [OK]
Hint: Look right for first bigger number using stack [OK]
Common Mistakes:
  • Confusing next greater with next smaller element
  • Searching to the left instead of right
  • Thinking it finds max element overall
2. Which of the following Java code snippets correctly initializes a stack to solve Next Greater Element?
easy
A. Stack stack = new Stack<int>();
B. Stack<Integer> stack = new Stack<>();
C. Stack<int> stack = new Stack<>();
D. Stack<> stack = new Stack<Integer>();

Solution

  1. Step 1: Check Java generic syntax for Stack

    Java uses generics with angle brackets and wrapper classes, so Stack<Integer> stack = new Stack<>(); is correct.
  2. Step 2: Identify errors in other options

    Stack stack = new Stack<int>(); misses generic type parameter syntax; Stack<int> stack = new Stack<>(); uses primitive int which is invalid; Stack<> stack = new Stack<Integer>(); has incorrect generic syntax.
  3. Final Answer:

    Stack<Integer> stack = new Stack<>(); -> Option B
  4. Quick Check:

    Use wrapper class Integer with generics [OK]
Hint: Use Stack<Integer> stack = new Stack<>(); for integers [OK]
Common Mistakes:
  • Using primitive int instead of Integer in generics
  • Missing generic type parameter <>
  • Incorrect generic syntax placement
3. What is the output of the following Java code for Next Greater Element?
int[] arr = {4, 5, 2, 25};
int[] nge = nextGreaterElement(arr);
System.out.println(Arrays.toString(nge));

public static int[] nextGreaterElement(int[] nums) {
    int n = nums.length;
    int[] result = new int[n];
    Stack<Integer> stack = new Stack<>();
    for (int i = n - 1; i >= 0; i--) {
        while (!stack.isEmpty() && stack.peek() <= nums[i]) {
            stack.pop();
        }
        result[i] = stack.isEmpty() ? -1 : stack.peek();
        stack.push(nums[i]);
    }
    return result;
}
medium
A. [5, 25, 25, -1]
B. [25, -1, 5, -1]
C. [5, 25, -1, -1]
D. [-1, 25, 25, -1]

Solution

  1. Step 1: Trace from right to left

    Start with i=3 (25): stack empty, result[3] = -1, push 25.
    i=2 (2): stack top=25 > 2, result[2]=25, push 2.
    i=1 (5): pop 2 (<=5), stack top=25 > 5, result[1]=25, push 5.
    i=0 (4): stack top=5 > 4, result[0]=5, push 4.
  2. Step 2: Collect results

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

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

    Right side bigger elements found correctly [OK]
Hint: Traverse array backward, use stack to track next greater [OK]
Common Mistakes:
  • Traversing left to right instead of right to left
  • Not popping smaller or equal elements from stack
  • Assigning wrong default -1 positions
4. Identify the bug in this Next Greater Element code snippet:
public static int[] nextGreaterElement(int[] nums) {
    int n = nums.length;
    int[] result = new int[n];
    Stack<Integer> stack = new Stack<>();
    for (int i = 0; i < n; i++) {
        while (!stack.isEmpty() && stack.peek() <= nums[i]) {
            stack.pop();
        }
        result[i] = stack.isEmpty() ? -1 : stack.peek();
        stack.push(nums[i]);
    }
    return result;
}
medium
A. Loop should run from right to left (i = n-1 to 0)
B. Stack should store indices, not values
C. Result array size is incorrect
D. Missing initialization of stack

Solution

  1. Step 1: Analyze loop direction

    The code loops from left to right, but Next Greater Element using stack requires right to left traversal to find next greater on the right.
  2. Step 2: Understand impact of loop direction

    Looping left to right causes incorrect results because stack does not have future elements yet.
  3. Final Answer:

    Loop should run from right to left (i = n-1 to 0) -> Option A
  4. Quick Check:

    Traverse backward for correct next greater [OK]
Hint: Traverse array backward to find next greater correctly [OK]
Common Mistakes:
  • Looping forward instead of backward
  • Using stack for values instead of indices (not always wrong but different approach)
  • Not popping smaller or equal elements
5. Given the array {13, 7, 6, 12}, what is the Next Greater Element array using a stack? Also, explain why the last element's next greater element is -1.
hard
A. [ 7, 12, 13, -1 ]
B. [ -1, 13, 12, -1 ]
C. [ -1, 12, -1, -1 ]
D. [ -1, 12, 12, -1 ]

Solution

  1. Step 1: Find next greater elements from right to left

    Start with 12 (last element): no elements to right, so result is -1.
    Next 6: next greater is 12.
    Next 7: next greater is 12.
    Next 13: no greater element to right, so -1.
  2. Step 2: Explain last element's result

    The last element has no elements to its right, so no next greater element exists, hence -1.
  3. Final Answer:

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

    Last element no right neighbor = -1 [OK]
Hint: Last element always -1, no elements to right [OK]
Common Mistakes:
  • Assigning next greater for last element incorrectly
  • Mixing up indices and values
  • Not traversing array backward
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