mirror of
https://github.com/trailofbits/algo.git
synced 2025-08-14 00:33:02 +02:00
Create f6
This commit is contained in:
parent
3468d27e61
commit
a40f4d6b27
1 changed files with 56 additions and 0 deletions
56
f6
Normal file
56
f6
Normal file
|
@ -0,0 +1,56 @@
|
|||
|
||||
// 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;
|
||||
}
|
Loading…
Add table
Reference in a new issue