java刷题--84柱状图中最大的矩形

Posted Anrys

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了java刷题--84柱状图中最大的矩形相关的知识,希望对你有一定的参考价值。

java刷题--84柱状图中最大的矩形

题目

在这里插入图片描述

代码

class Solution {
    public int largestRectangleArea(int[] heights) {
        int maxarea = 0;
        int len = heights.length;
        for (int i=0;i<len;i++){
            if (heights[i]*len<=maxarea) continue;// 如果当前元素的值×长度都小于当前maxarea则没有继续查找的必要
            int left = i,right = i;
            while (left>0 && heights[left-1]>=heights[i]) left--;
            while (right<len-1 && heights[right+1]>=heights[i]) right++;
            int area = (right-left+1)*heights[i];
            if (area>maxarea) maxarea = area;
        } return maxarea;
    }
}

单调栈

class Solution {
    public int largestRectangleArea(int[] h) {
    int n = h.length, i = 0, max = 0;
    Stack<Integer> s = new Stack<>();
    while (i < n) {
        while (!s.isEmpty() && h[i] < h[s.peek()]) {
            int high =  h[s.pop()];
            int width = i - (s.isEmpty() ? 0 : s.peek() + 1);
            max = Math.max(max, high * width);
        }
        s.push(i); //自增最后操作
        i++;
    }
    while (!s.isEmpty()){
    //留到最后是最小的 宽度由n来减
     max = Math.max(max, h[s.pop()] * (n - (s.isEmpty() ? 0 : s.peek() + 1)));     
    } 
    return max;
  }
}

结果

在这里插入图片描述

以上是关于java刷题--84柱状图中最大的矩形的主要内容,如果未能解决你的问题,请参考以下文章

84. 柱状图中最大的矩形

LeetCode84. 柱状图中最大的矩形

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

5.30——84. 柱状图中最大的矩形

5.30——84. 柱状图中最大的矩形

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