class Solution {
    public int largestRectangleArea(int[] heights) {
        if (heights == null || heights.length == 0) {
            return 0;
        }
        Stack<Integer> stack = new Stack<>();
        int ans = 0;
        for (int i = 0; i <= heights.length; i++) {
            int curtHeight = (i == heights.length) ? -1 : heights[i];
            while (!stack.isEmpty() && curtHeight <= heights[stack.peek()]) {
                int h = heights[stack.pop()];
                int w = (stack.isEmpty()) ? i : i - stack.peek() - 1;
                ans = Math.max(ans, w * h);
            }
            stack.push(i);
        }
        return ans;
    }
}

results matching ""

    No results matching ""