lc-84


//Given an array of integers heights representing the histogram's bar height whe
//re the width of each bar is 1, return the area of the largest rectangle in the h
//istogram. 
//
// 
// Example 1: 
//
// 
//Input: heights = [2,1,5,6,2,3]
//Output: 10
//Explanation: The above is a histogram where width of each bar is 1.
//The largest rectangle is shown in the red area, which has an area = 10 units.
// 
//
// Example 2: 
//
// 
//Input: heights = [2,4]
//Output: 4
// 
//
// 
// Constraints: 
//
// 
// 1 <= heights.length <= 105 
// 0 <= heights[i] <= 104 
// 
// Related Topics Array Stack Monotonic Stack 
// 👍 11428 👎 160


//leetcode submit region begin(Prohibit modification and deletion)
class Solution {
    public int largestRectangleArea(int[] receive){
        int maxArea = 0;
        int[] left = new int[receive.length];
        int[] right = new int[receive.length];
        Stack<Integer> stack = new Stack<>();
        for (int i = 0; i < receive.length; i++) {
            while (!stack.isEmpty() && receive[stack.peek()] >= receive[i]) {
                stack.pop();
            }
            if (stack.isEmpty()) {
                left[i] = -1;
            } else {
                left[i] = stack.peek();
            }
            stack.push(i);
        }
        stack.clear();
        for (int i = receive.length - 1; i >= 0; i--) {
            while (!stack.isEmpty() && receive[stack.peek()] >= receive[i]) {
                stack.pop();
            }
            if (stack.isEmpty()) {
                right[i] = receive.length;
            } else {
                right[i] = stack.peek();
            }
            stack.push(i);
        }
        for (int i = 0; i < receive.length; i++) {
            maxArea = Math.max(maxArea, (right[i] - left[i] - 1) * receive[i]);
        }
        return maxArea;
    }
}
//leetcode submit region end(Prohibit modification and deletion)

文章作者: 倪春恩
版权声明: 本博客所有文章除特別声明外,均采用 CC BY 4.0 许可协议。转载请注明来源 倪春恩 !