Skip to main content

Next Greater elements in right

Next Greater elements in right using stack


function next_greater_right(arr)
{
  var v = [];
  var s = [];
  for(var i = arr.length - 1; i >= 0; i--)
  {
    if(s.length == 0)
    {
      v.push(-1);
    }
    else if(s.length > 0 && s[s.length - 1] > arr[i])
    {
      v.push(s[s.length - 1]);
    }
    else if(s.length > 0 && s[s.length - 1] <= arr[i])
    {
      while(s.length > 0 && s[s.length - 1] <= arr[i])
      {
        s.pop();
      }
      if(s.length == 0)
      {
        v.push(-1);
      }
      else
      {
        v.push(s[s.length - 1]);
      }
    }
    s.push(arr[i]);
  }
  v.reverse();
  return v;
}