84. Largest Rectangle in Histogram
Given n non-negative integers representing the histogram's bar height where the width of each bar is 1, find the area of largest rectangle in the histogram.
Above is a histogram where width of each bar is 1, given height = [2,1,5,6,2,3]
.
The largest rectangle is shown in the shaded area, which has area = 10
unit.
For example,
Given heights = [2,1,5,6,2,3]
,
return 10
.
此题需要注意数组overflow情况,即新创建的数组的最后一个元素一定要为0!代码如下:
public class Solution {
public int largestRectangleArea(int[] heights) {
int max = 0;
if(heights.length==0) return max;
int[] h = new int[heights.length+1];
for(int i=0;i<heights.length;i++){
h[i] = heights[i];
}
Stack<Integer> s =new Stack<Integer>();
for(int i=0;i<h.length;i++){
if(s.isEmpty()||h[s.peek()]<=h[i]){
s.push(i);
}else{
while(!s.isEmpty()&&h[s.peek()]>h[i]){
int top= s.pop();
int area = h[top]*(s.isEmpty()?i:i-s.peek()-1);
max = Math.max(max,area);
}
s.push(i);
}
}
return max;
}
}
【推荐】还在用 ECharts 开发大屏?试试这款永久免费的开源 BI 工具!
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步