给定 n 个非负整数,用来表示柱状图中各个柱子的高度。每个柱子彼此相邻,且宽度为 1
https://leetcode-cn.com/problems/largest-rectangle-in-histogram/
求在该柱状图中,能够勾勒出来的矩形的最大面积。
示例1:
Java解法
package sj.shimmer.algorithm.m2;
/**
* Created by SJ on 2021/3/10.
*/
class D44 {
public static void main(String[] args) {
System.out.println(largestRectangleArea(new int[]{2,1,5,6,2,3}));
}
public static int largestRectangleArea(int[] heights) {
if (heights == null) {
return 0;
}
int length = heights.length;
long sum = 0;
int height = 0;
for (int i = 0; i < length; i++) {
int left = i;
int right = i;
if (height == heights[i]) {
continue;
}
height = heights[i];
while (left >= 0 && heights[left] >= height) {
left--;
}
while (right < length && heights[right] >= height) {
right++;
}
long temp = height * (right - left - 1);
sum = sum > temp ? sum : temp;
}
return (int) sum;
}
}
官方解
主要思路就是:枚举(宽或者高)
-
单调栈
- 时间复杂度:O(N)
- 空间复杂度:O(N)
-
单调栈 + 常数优化
- 时间复杂度:O(N)
- 空间复杂度:O(N)