刷题74 柱状图中的最大矩形

68 阅读1分钟

给定 n 个非负整数,用来表示柱状图中各个柱子的高度。每个柱子彼此相邻,且宽度为 1 。

求在该柱状图中,能够勾勒出来的矩形的最大面积。

 

示例 1:

输入: heights = [2,1,5,6,2,3]
输出: 10
解释: 最大的矩形为图中红色区域,面积为 10

示例 2:

输入: heights = [2,4]
输出: 4

 

提示:

  • 1 <= heights.length <=105
  • 0 <= heights[i] <= 104

题解: 单调栈

class Solution {
public int largestRectangleArea(int[] heights) {
    int n =heights.length;
    //类似接雨水? []left []right 存储到此的最低高度
    int[]left=new int[n];
    int[]right=new int[n];
    Deque<Integer> stack = new ArrayDeque<Integer>();
    for(int i=0;i<n;i++){
        while(!stack.isEmpty()&&heights[i]<=heights[stack.peek()])
            stack.pop();
        left[i]=(stack.isEmpty()?-1:stack.peek());
        stack.push(i);
    }
    stack.clear();
    for(int j=n-1;j>=0;j--){
        while(!stack.isEmpty()&&heights[j]<=heights[stack.peek()])
            stack.pop();
        right[j]=(stack.isEmpty()?n:stack.peek());
        stack.push(j);
    }
    
    int result=0;
for (int i = 0; i < n; ++i) {
        result = Math.max(result , (right[i] - left[i] - 1) * heights[i]);
    }

    return result;
    }
}