private int largestRectangleArea(int[] height) {
            ArrayDeque<Integer> p = new ArrayDeque<Integer>();
            int i = 0;
            int maxArea = 0;
            while (i < height.length) {
                if (p.isEmpty() || height[p.peekLast()] <= height[i]) {
                    p.offerLast(i++);
                } else {
                    int pos = p.removeLast();
                    maxArea = Math.max(maxArea, height[pos]
                            * (p.isEmpty() ? i : (i - p.peekLast() - 1)));
                }
            }
            return maxArea;
        }