LeetCode 84.柱状图中最大的矩形

2 阅读1分钟

思路

我们将数组的左右两边都加上0,然后遍历数组元素,遍历到第i个元素的时候,找到左边第一个比他小的元素,然后找到右边第一个比他小的元素,然后我们计算出相应的宽和高,就可以得到最终的结果了。

代码

class Solution {

    public int largestRectangleArea(int[] heights) {

        List<Integer> list = new ArrayList<>();

        Stack<Integer> stack = new Stack<>();

        list.add(0);

        int ans = 0;

        for(int i=0;i<heights.length;i++)

            list.add(heights[i]);

        list.add(0);

        for(int i=0;i<list.size();i++){

            while(!stack.isEmpty() && list.get(i) < list.get(stack.peek())){

                int bottom = list.get(stack.pop());

                if(stack.isEmpty()) break;

                int left = stack.peek();

                int right = i;

                int h = bottom;

                int w = right-left-1;

                ans = Math.max(ans,h*w);

            }

            stack.push(i);

        }

        return ans;

    }

}