Loading...

单调栈-柱状图中的最大矩形

阅读 ...

在这里插入图片描述 在这里插入图片描述

代码求解

对于直方图中的每个高度,找到其左右两侧离它最近且比它小的高度位置,以该高度为高向左右两侧拓展,计算拓展的单位数,再乘以该高度得到长方形面积,对每个高度进行遍历,求得最大值。

虽然高度相等的时候弹出的计算结果可能是错误的,但总是会有最后一个相同高度能够算对,所以并不会影响最终求解的最大长方形的面积。

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
class Solution {
    	public static int MAXN = 100001;
	public static int[] stack = new int[MAXN];
	public static int r;

	public static int largestRectangleArea(int[] height){
		int n = height.length;
		r = 0;
		int ans = 0,cur,left;
		for(int i = 0;i<n;i++){
			while(r>0&&height[stack[r-1]]>=height[i]){
				cur = stack[--r];
				left = r==0?-1:stack[r-1];
				ans = Math.max(ans, height[cur]*(i-left-1));
			}
			stack[r++]=i;
		}

		while (r>0) {
			cur = stack[--r];
			left = r==0?-1:stack[r-1];
			ans = Math.max(ans, height[cur]*(n-left-1));
		}
		return ans;
	}
}
本文由 iamxurulin 原创发布,转载请保留原文链接。
最后更新于 2026-08-23 17:21:42
关于作者与文章

本文为 iamxurulin 原创技术文章。如对内容有疑问或建议,欢迎在评论区交流讨论。

Coder_Studio - 记录后端开发、算法与 AI 的成长之路