题目描述
给定 n 个非负整数,用来表示柱状图中各个柱子的高度。每个柱子彼此相邻,且宽度为 1 。
求在该柱状图中,能够勾勒出来的矩形的最大面积。
解题思路
借助栈的结构,需要先向栈底压入-1,依次遍历每个高度不同的柱子,当栈顶柱子的高度高于当前遍历的柱子高度时,可以求一次最大面积,将栈顶弹出,用其高度乘以当前遍历索引减去栈顶元素索引再减1,最后去其值和当前面积的最大值,然后更新最大面积值变量,之后将当前遍历的元素压栈,重复上述操作,遍历结束时,如果栈不为空(栈顶元素不是-1),则再用相同的方法求面积,直到栈顶元素为-1,结束。
代码实现
去博客设置页面,选择一款你喜欢的代码片高亮样式,下面展示同样高亮的 代码片
.
import java.util.Stack;
public class maxRectangleArea {
//求柱状图中最大的矩形
public int largestArea(int[] height){ //acc:21ms 80%
Stack<Integer> stack=new Stack<>();
stack.push(-1);
int maxArea=0;
for (int i=0;i<height.length;i++){
while (stack.peek()!=-1&&height[stack.peek()]>=height[i]){
maxArea=Math.max(maxArea,height[stack.pop()]*(i-stack.peek()-1));
}
stack.push(i);
}
while (stack.peek()!=-1){
maxArea=Math.max(maxArea,height[stack.pop()]*(height.length-stack.peek()-1));
}
return maxArea;
}
public static void main(String[] args) {
maxRectangleArea test=new maxRectangleArea();
int[] height={6,7,5,2,4,5,9,3};
int area=test.largestArea(height);
System.out.println(area);
}
}
总结
本题来源于Leetcode中 归属于栈类型题目。
同许多在算法道路上不断前行的人一样,不断练习,修炼自己!
如有博客中存在的疑问或者建议,可以在下方留言一起交流,感谢各位!
觉得本博客有用的客官,可以给个赞鼓励下! 嘿嘿