leetcode-zgd-day60-84.柱状图中最大的矩形

65 阅读1分钟

84.柱状图中最大的矩形

题目链接:84. 柱状图中最大的矩形 - 力扣(Leetcode)

解题思路:

这个题和接雨水有异曲同工之妙,只需要找到两侧最近的高度小于当前矩形的下标,就可以确定以当前矩形为高度的长方形最大面积是多少。

 class Solution {
     public int largestRectangleArea(int[] heights) {
         int n = heights.length;
         int[] left = new int[n];
         int[] right = new int[n];
         
         Deque<Integer> mono_stack = new ArrayDeque<Integer>();
         for (int i = 0; i < n; ++i) {
             while (!mono_stack.isEmpty() && heights[mono_stack.peek()] >= heights[i]) {
                 mono_stack.pop();
             }
             left[i] = (mono_stack.isEmpty() ? -1 : mono_stack.peek());
             mono_stack.push(i);
         }
 ​
         mono_stack.clear();
         for (int i = n - 1; i >= 0; --i) {
             while (!mono_stack.isEmpty() && heights[mono_stack.peek()] >= heights[i]) {
                 mono_stack.pop();
             }
             right[i] = (mono_stack.isEmpty() ? n : mono_stack.peek());
             mono_stack.push(i);
         }
         
         int ans = 0;
         for (int i = 0; i < n; ++i) {
             ans = Math.max(ans, (right[i] - left[i] - 1) * heights[i]);
         }
         return ans;
     }
 }