youngyangyang04/leetcode-master-comment

[Vssue]0084.柱状图中最大的矩形.md

Opened this issue · 1 comments

像java这种传参是普通数组的在前后加0就不太方便了, 可以通过一些小小的判断来代替加0:

class Solution {
    public int largestRectangleArea(int[] heights) {
        // 单调栈
        Deque<Integer> stack = new ArrayDeque<>();
        int res = 0;
        for (int i = 0; i <= heights.length; i++) {
            // 末尾加一个0, 方便计算
            int cur = i == heights.length ? 0 : heights[i];
            while (!stack.isEmpty() && cur < heights[stack.peek()]) {
                int top = stack.pop();
                // 左边第一个比当前小的
                int left = stack.isEmpty() ? -1 : stack.peek(); // 开头加一个0
                // 右边第一个比当前小的
                int right = i;
                // 宽度
                int width = right - left - 1;
                // 高度
                int height = heights[top];
                // 计算面积
                res = Math.max(res, width * height);
            }
            stack.push(i);
        }
        return res;
    }
}