JSFiddle - React, Tailwind, and code Playground

by Bhesh Gurung

JavaScript

function largetRect(hist) {
  var h, pos, tempH, tempPos, tempSize = 0,
    maxSize = -Infinity;
  var hStack = [],
    pStack = [];

  function popThatShi() {
    tempH = hStack.pop();
    tempPos = pStack.pop();
    tempSize = tempH * (pos - tempPos);
    maxSize = Math.max(tempSize, maxSize);
  }

  for (pos = 0; pos < hist.length; pos++) {
    h = hist[pos];
    if (hStack.length === 0 || h > hStack[hStack.length - 1]) {
      hStack.push(h);
      pStack.push(pos);
    } else if (h < hStack[hStack.length - 1]) {
      while (hStack.length && h < hStack[hStack.length - 1]) {
        popThatShi();
      }
      if (hStack.length === 0) {
        hStack.push(h);
        pStack.push(tempPos);
      }
    }
  }
  while (hStack.length) {
    popThatShi();
  }
  return maxSize;
}

alert(largetRect([2, 1, 5, 6, 4, 4, 3]));