public class Main {
/**
* Slightly modified code from
* https://w...content-available-to-author-only...s.org/next-greater-element/
* find a solution for the next element greater than current not less than N
*/
static class stack {
int top;
int items[] = new int[100];
// Stack functions to be used by printNGE
void push(int x)
{
if (top == 99)
{
System.
out.
println("Stack full"); }
else
{
items[++top] = x;
}
}
int pop()
{
if (top == -1)
{
System.
out.
println("Underflow error"); return -1;
}
else
{
int element = items[top];
top--;
return element;
}
}
boolean isEmpty()
{
return (top == -1) ? true : false;
}
}
static void printNGE(int arr[], int n)
{
int i = 0;
stack s = new stack();
s.top = -1;
int element, next;
/* push the first element to stack */
s.push(arr[0]);
// iterate for rest of the elements
for (i = 1; i < arr.length; i++)
{
next = arr[i];
if (s.isEmpty() == false)
{
// if stack is not empty, then
// pop an element from stack
element = s.pop();
/* 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 (n * element < next)
{
System.
out.
println(n
+ " * " + element
+ " --> " + next
); if (s.isEmpty() == true)
break;
element = s.pop();
}
/* If element is greater than next, then
push the element back */
if (n * element > next)
s.push(element);
}
/* push next to stack so that we can find next
greater for it */
s.push(next);
}
/* After iterating over the loop, the remaining
elements in stack do not have the next greater
element, so print -1 for them */
while (s.isEmpty() == false)
{
element = s.pop();
next = -1;
System.
out.
println(element
+ " -- " + next
); }
}
public static void main
(String[] args
) {
int arr[] = { 2, 5, 4, 7, 3, 8, 9, 6 };
int n = arr.length;
printNGE(arr, 2);
}
}
cHVibGljIGNsYXNzIE1haW4gewogICAgLyoqCiAgICAgKiBTbGlnaHRseSBtb2RpZmllZCBjb2RlIGZyb20gCiAgICAgKiBodHRwczovL3cuLi5jb250ZW50LWF2YWlsYWJsZS10by1hdXRob3Itb25seS4uLnMub3JnL25leHQtZ3JlYXRlci1lbGVtZW50LwogICAgICogZmluZCBhIHNvbHV0aW9uIGZvciB0aGUgbmV4dCBlbGVtZW50IGdyZWF0ZXIgdGhhbiBjdXJyZW50IG5vdCBsZXNzIHRoYW4gTgogICAgICovCiAgICAKCXN0YXRpYyBjbGFzcyBzdGFjayAgeyAKICAgICAgICBpbnQgdG9wOyAKICAgICAgICBpbnQgaXRlbXNbXSA9IG5ldyBpbnRbMTAwXTsgCiAgCiAgICAgICAgLy8gU3RhY2sgZnVuY3Rpb25zIHRvIGJlIHVzZWQgYnkgcHJpbnROR0UgCiAgICAgICAgdm9pZCBwdXNoKGludCB4KSAgCiAgICAgICAgeyAKICAgICAgICAgICAgaWYgKHRvcCA9PSA5OSkgIAogICAgICAgICAgICB7IAogICAgICAgICAgICAgICAgU3lzdGVtLm91dC5wcmludGxuKCJTdGFjayBmdWxsIik7IAogICAgICAgICAgICB9ICAKICAgICAgICAgICAgZWxzZSAKICAgICAgICAgICAgeyAKICAgICAgICAgICAgICAgIGl0ZW1zWysrdG9wXSA9IHg7IAogICAgICAgICAgICB9IAogICAgICAgIH0gCiAgCiAgICAgICAgaW50IHBvcCgpICAKICAgICAgICB7IAogICAgICAgICAgICBpZiAodG9wID09IC0xKSAgCiAgICAgICAgICAgIHsgCiAgICAgICAgICAgICAgICBTeXN0ZW0ub3V0LnByaW50bG4oIlVuZGVyZmxvdyBlcnJvciIpOyAKICAgICAgICAgICAgICAgIHJldHVybiAtMTsgCiAgICAgICAgICAgIH0gIAogICAgICAgICAgICBlbHNlIAogICAgICAgICAgICB7IAogICAgICAgICAgICAgICAgaW50IGVsZW1lbnQgPSBpdGVtc1t0b3BdOyAKICAgICAgICAgICAgICAgIHRvcC0tOyAKICAgICAgICAgICAgICAgIHJldHVybiBlbGVtZW50OyAKICAgICAgICAgICAgfSAKICAgICAgICB9IAogIAogICAgICAgIGJvb2xlYW4gaXNFbXB0eSgpICAKICAgICAgICB7IAogICAgICAgICAgICByZXR1cm4gKHRvcCA9PSAtMSkgPyB0cnVlIDogZmFsc2U7IAogICAgICAgIH0gCiAgICB9IAogICAgCglzdGF0aWMgdm9pZCBwcmludE5HRShpbnQgYXJyW10sIGludCBuKSAgCiAgICB7IAogICAgICAgIGludCBpID0gMDsgCiAgICAgICAgc3RhY2sgcyA9IG5ldyBzdGFjaygpOyAKICAgICAgICBzLnRvcCA9IC0xOyAKICAgICAgICBpbnQgZWxlbWVudCwgbmV4dDsgCiAgCiAgICAgICAgLyogcHVzaCB0aGUgZmlyc3QgZWxlbWVudCB0byBzdGFjayAqLwogICAgICAgIHMucHVzaChhcnJbMF0pOyAKICAKICAgICAgICAvLyBpdGVyYXRlIGZvciByZXN0IG9mIHRoZSBlbGVtZW50cyAKICAgICAgICBmb3IgKGkgPSAxOyBpIDwgYXJyLmxlbmd0aDsgaSsrKSAgCiAgICAgICAgeyAKICAgICAgICAgICAgbmV4dCA9IGFycltpXTsgCiAgCiAgICAgICAgICAgIGlmIChzLmlzRW1wdHkoKSA9PSBmYWxzZSkgIAogICAgICAgICAgICB7IAogICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgIC8vIGlmIHN0YWNrIGlzIG5vdCBlbXB0eSwgdGhlbiAgCiAgICAgICAgICAgICAgICAvLyBwb3AgYW4gZWxlbWVudCBmcm9tIHN0YWNrIAogICAgICAgICAgICAgICAgZWxlbWVudCA9IHMucG9wKCk7IAogIAogICAgICAgICAgICAgICAgLyogSWYgdGhlIHBvcHBlZCBlbGVtZW50IGlzIHNtYWxsZXIgdGhhbiAgCiAgICAgICAgICAgICAgICAgICBuZXh0LCB0aGVuIGEpIHByaW50IHRoZSBwYWlyIGIpIGtlZXAgIAogICAgICAgICAgICAgICAgICAgcG9wcGluZyB3aGlsZSBlbGVtZW50cyBhcmUgc21hbGxlciBhbmQgIAogICAgICAgICAgICAgICAgICAgc3RhY2sgaXMgbm90IGVtcHR5ICovCiAgICAgICAgICAgICAgICB3aGlsZSAobiAqIGVsZW1lbnQgPCBuZXh0KSAgCiAgICAgICAgICAgICAgICB7IAogICAgICAgICAgICAgICAgICAgIFN5c3RlbS5vdXQucHJpbnRsbihuICsgIiAqICIgKyBlbGVtZW50ICsgIiAtLT4gIiArIG5leHQpOyAKICAgICAgICAgICAgICAgICAgICBpZiAocy5pc0VtcHR5KCkgPT0gdHJ1ZSkgCiAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFrOyAKICAgICAgICAgICAgICAgICAgICBlbGVtZW50ID0gcy5wb3AoKTsgCiAgICAgICAgICAgICAgICB9IAogIAogICAgICAgICAgICAgICAgLyogSWYgZWxlbWVudCBpcyBncmVhdGVyIHRoYW4gbmV4dCwgdGhlbiAgCiAgICAgICAgICAgICAgICAgICBwdXNoIHRoZSBlbGVtZW50IGJhY2sgKi8KICAgICAgICAgICAgICAgIGlmIChuICogZWxlbWVudCA+IG5leHQpIAogICAgICAgICAgICAgICAgICAgIHMucHVzaChlbGVtZW50KTsgCiAgICAgICAgICAgIH0gCiAgCiAgICAgICAgICAgIC8qIHB1c2ggbmV4dCB0byBzdGFjayBzbyB0aGF0IHdlIGNhbiBmaW5kIG5leHQgCiAgICAgICAgICAgICAgIGdyZWF0ZXIgZm9yIGl0ICovCiAgICAgICAgICAgIHMucHVzaChuZXh0KTsgCiAgICAgICAgfSAKICAKICAgICAgICAvKiBBZnRlciBpdGVyYXRpbmcgb3ZlciB0aGUgbG9vcCwgdGhlIHJlbWFpbmluZyAgCiAgICAgICAgICAgZWxlbWVudHMgaW4gc3RhY2sgZG8gbm90IGhhdmUgdGhlIG5leHQgZ3JlYXRlciAgCiAgICAgICAgICAgZWxlbWVudCwgc28gcHJpbnQgLTEgZm9yIHRoZW0gKi8KICAgICAgICB3aGlsZSAocy5pc0VtcHR5KCkgPT0gZmFsc2UpICAKICAgICAgICB7IAogICAgICAgICAgICBlbGVtZW50ID0gcy5wb3AoKTsgCiAgICAgICAgICAgIG5leHQgPSAtMTsgCiAgICAgICAgICAgIFN5c3RlbS5vdXQucHJpbnRsbihlbGVtZW50ICsgIiAtLSAiICsgbmV4dCk7IAogICAgICAgIH0gCiAgICB9IAogIAogICAgcHVibGljIHN0YXRpYyB2b2lkIG1haW4oU3RyaW5nW10gYXJncykgIAogICAgeyAKICAgICAgICBpbnQgYXJyW10gPSB7IDIsIDUsIDQsIDcsIDMsIDgsIDksIDYgfTsgCiAgICAgICAgaW50IG4gPSBhcnIubGVuZ3RoOyAKICAgICAgICBwcmludE5HRShhcnIsIDIpOyAKICAgIH0gCn0=