文章目录
一、84.柱状图中最大的矩形
- 和上一个思路差不多,这里需要扩容
- 注意高度是中间的高度。
public int largestRectangleArea(int[] heights) {
LinkedList<Integer> stack = new LinkedList<>();
//数组扩容
int[] newHeights = new int[heights.length+2];
newHeights[0] = 0;
newHeights[heights.length+1]=0;
for(int i =1;i<newHeights.length-1;i++){
newHeights[i] = heights[i-1];
}
heights = newHeights;
stack.add(0);
int area = 0;
for(int i=1;i<heights.length;i++){
if(heights[i]>=heights[stack.peekLast()]){
stack.add(i);
} else{
while(!stack.isEmpty()&& heights[i]<heights[stack.peekLast()]){
int mid = stack.removeLast();
int left = stack.peekLast();
int right = i;
int w = right-left-1;
int h = heights[mid];//?
area = Math.max(area,w*h);
}
stack.add(i);
}
}
return area;
}
11分钟