📖 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
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.
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.
Final Answer:
The first greater element to the right of each element -> Option C
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
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.
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.
Final Answer:
Stack<Integer> stack = new Stack<>(); -> Option B
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;
}
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
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.
Step 2: Understand impact of loop direction
Looping left to right causes incorrect results because stack does not have future elements yet.
Final Answer:
Loop should run from right to left (i = n-1 to 0) -> Option A
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
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.
Step 2: Explain last element's result
The last element has no elements to its right, so no next greater element exists, hence -1.
Final Answer:
[ -1, 12, 12, -1 ] -> Option D
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 unknownstrongwhile earning +1 Grip toward your certificate.