-
-
Save SuryaPratapK/4dc80d52ebe101825c0b0a6e2f4bbcf6 to your computer and use it in GitHub Desktop.
// A Stack based C++ program to find next | |
// greater element for all array elements. | |
#include <bits/stdc++.h> | |
using namespace std; | |
/* prints element and NGE pair for all | |
elements of arr[] of size n */ | |
void printNGE(int arr[], int n) { | |
stack < int > s; | |
/* push the first element to stack */ | |
s.push(arr[0]); | |
// iterate for rest of the elements | |
for (int i = 1; i < n; i++) { | |
if (s.empty()) { | |
s.push(arr[i]); | |
continue; | |
} | |
/* if stack is not empty, then | |
pop an element from stack. | |
If the popped element is smaller | |
than next, then | |
a) print the pair | |
b) keep popping while elements are | |
smaller and stack is not empty */ | |
while (s.empty() == false && s.top() < arr[i]) | |
{ | |
cout << s.top() << " --> " << arr[i] << endl; | |
s.pop(); | |
} | |
/* push next to stack so that we can find | |
next greater for it */ | |
s.push(arr[i]); | |
} | |
/* After iterating over the loop, the remaining | |
elements in stack do not have the next greater | |
element, so print -1 for them */ | |
while (s.empty() == false) { | |
cout << s.top() << " --> " << -1 << endl; | |
s.pop(); | |
} | |
} | |
/* Driver program to test above functions */ | |
int main() { | |
int arr[] = {11, 13, 21, 3}; | |
int n = sizeof(arr) / sizeof(arr[0]); | |
printNGE(arr, n); | |
return 0; | |
} |
Should have written the code that was explained in the video and not copied it from geeks.
int main() {
/* Enter your code here. Read input from STDIN. Print output to STDOUT */
int n;
stack mystack;
cin >> n;
int arr[n],ans[n];
for(int i = 0;i < n;++i)
ans[i] = -1;
for(int i = 0;i < n;++i)
cin >> arr[i];
for(int i = 0;i < n;++i)
{
while(!mystack.empty() && arr[i] > arr[mystack.top()])
{
int a = mystack.top();
mystack.pop();
ans[a] = arr[i];
}
mystack.push(i);
}
for(int i = 0;i < n;++i)
cout << arr[i] << " " << ans[i] << endl;
return 0;
}
//my code
You are teaching very good sir.
dont copy code from gfg.
`class Solution {
public static int [] nextGreaterElement(int [] a) {
/* write your solution here */
int n=a.length;
int[] b=new int[n];
for(int i=0;i<n;i++)
{
b[i]=-1;
}
Stack st=new Stack();
st.push(0);
for(int i=1;i<n;i++)
{
//int top=st.peek();
while(!st.empty()&&a[st.peek()]<a[i])
{
b[st.peek()]=a[i];
st.pop();
}
st.push(i);
}
return b;
}
}`
this solution is too complicated and would give a runtime error on most platforms. Please try simplifying it.
Java code ,
same approach as sir has followed
public static long[] solveNextLargerElement(long[] arr,int n){
long[] ans = new long[n];
Stack<Integer> stack = new Stack<>();
for(int i=0;i< n;i++){
if(stack.size()==0){
stack.push(i);
continue;
}
while(stack.size()>0 && arr[i] > arr[stack.peek()]){
ans[stack.pop()]= arr[i];
}
stack.push(i);
}
while(stack.size()>0){
ans[stack.pop()]=-1;
}
return ans;
}
Java code , same approach as sir has followed
public static long[] solveNextLargerElement(long[] arr,int n){ long[] ans = new long[n]; Stack<Integer> stack = new Stack<>(); for(int i=0;i< n;i++){ if(stack.size()==0){ stack.push(i); continue; } while(stack.size()>0 && arr[i] > arr[stack.peek()]){ ans[stack.pop()]= arr[i]; } stack.push(i); } while(stack.size()>0){ ans[stack.pop()]=-1; } return ans; }
Thanks 😁
For my snake lovers:
def solve_next_larger_element(arr, n):
ans = [-1] * n
stack = []
for i in range(n):
while stack and arr[i] > arr[stack[-1]]:
ans[stack.pop()] = arr[i]
# Push current index onto the stack
stack.append(i)
return ans
copied the code from geeksforgeeks .
although your teaching well but you should write your own code