柱状图中最大的矩形
题目详细:LeetCode.84
详细的题解可查阅:《代码随想录》— 柱状图中最大的矩形
Java解法(单调栈):
class Solution {
public int largestRectangleArea(int[] heights) {
Stack<Integer> stack = new Stack<>();
stack.push(0);
List<Integer> newHeights = Arrays.stream(heights).boxed().collect(Collectors.toList());
newHeights.add(0, 0);
newHeights.add(heights.length + 1, 0);
int res = 0;
for(int i = 1; i < newHeights.size(); i++){
while(newHeights.get(i) < newHeights.get(stack.peek())){
int mid = stack.pop();
int w = i - stack.peek() - 1;
int h = newHeights.get(mid);
res = Math.max(res, w * h);
}
stack.push(i);
}
return res;
}
}