栏目分类:
子分类:
返回
名师互学网用户登录
快速导航关闭
当前搜索
当前分类
子分类
实用工具
热门搜索
名师互学网 > IT > 软件开发 > 后端开发 > Java

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

Java 更新时间: 发布时间: IT归档 最新发布 模块sitemap 名妆网 法律咨询 聚返吧 英语巴士网 伯小乐 网商动力

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

题目描述

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

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

样例描述

思路

单调栈

    暴力思路:左边找一个比当前位置高度小的,右边找个比当前位置高度小的,则以当前位置向两边拓展能达到的最大面积为,

    如果直接暴力枚举所有点,再分别枚举向左边和向右边拓展,会超时维护一个单调递增的栈,只要比栈顶大就入栈,比栈顶小,此时以栈顶前一个,栈顶,和当前元素就符合了计算cur位置的最大面积条件。 例如栈里5, 6,来了一个2小技巧。考虑到首尾也可能算入面积计算,为了避免复杂的边界处理,这里给首尾设置两个哨兵0

相似题目:接雨水

代码
class Solution {
    public int largestRectangleArea(int[] heights) {
        int n = heights.length;
        int newheight[] = new int[n + 2];
        for (int i = 1; i <= n; i ++ ) {
            newheight[i] = heights[i - 1];
        }
        int res = 0;
        Deque stack = new ArrayDeque<>();
        for (int i = 0; i < n + 2; i ++ ) {
            //如果当前值比栈顶小,就构成了一组可计算面积的
            while (!stack.isEmpty() && newheight[i] < newheight[stack.peek()]) {
                int cur = stack.pop();
                res = Math.max(res, (i - stack.peek() - 1) * newheight[cur]);
            }
            //比栈顶大,就入栈,维护单调递增栈
            stack.push(i);
        }
        return res;
    }
}
转载请注明:文章转载自 www.mshxw.com
本文地址:https://www.mshxw.com/it/755665.html
我们一直用心在做
关于我们 文章归档 网站地图 联系我们

版权所有 (c)2021-2022 MSHXW.COM

ICP备案号:晋ICP备2021003244-6号