1 柱状图中的最大矩阵
题目
给定 n 个非负整数,用来表示柱状图中各个柱子的高度。每个柱子彼此相邻,且宽度为 1 。
求在该柱状图中,能够勾勒出来的矩形的最大面积。
代码
class Solution {
public int largestRectangleArea(int[] heights) {
int len=heights.length;
int[] minleft=new int[len];
int[] minright=new int[len];
minleft[0]=-1;
for(int i=1;i<len;i++){
int t=i-1;
while(t>=0 && heights[t]>=heights[i]) t=minleft[t];
minleft[i]=t;
}
minright[len-1]=len;
for(int i=len-2;i>=0;i--){
int t=i+1;
while(t<len && heights[t]>=heights[i]) t=minright[t];
minright[i]=t;
}
int res=0;
for(int i=0;i<len;i++){
int sum=heights[i]*(minright[i]-minleft[i]-1);
res=Math.max(res,sum);
}
return res;
}
}
总结
虽然做了接雨水,这道题和它很相似。
但我没想明白的是sum = heights[i] * (minRightIndex[i] - minLeftIndex[i] - 1);
然后我根据代码自己手算一遍,还真的是这样。
单调栈(⊙﹏⊙),下次看吧