文档讲解:柱状图中最大的矩形
84.柱状图中最大的矩形
题目链接:https://leetcode.cn/problems/next-greater-element-ii/description/
思路:
和42类似的做法。
其实我们以每列高度为基准的话,看是否能向左向右延伸即可。比该列高就可延伸,否则不可。
我们可以分别预处理出向左向右延伸的长度,即可得到以该列为基准的最大矩阵的宽,高则为该列的高度。
O(n)扫一遍求以每列为基准的最大矩阵,统计最大值即可。
核心代码:
class Solution {
public:
int largestRectangleArea(vector<int>& heights) {
vector<int> minLeftIndex(heights.size());
vector<int> minRightIndex(heights.size());
int size = heights.size();
minLeftIndex[0] = -1;
for (int i = 1; i < size; i++) {
int t = i - 1;
while (t >= 0 && heights[t] >= heights[i]) t = minLeftIndex[t];
minLeftIndex[i] = t;
}
minRightIndex[size - 1] = size;
for (int i = size - 2; i >= 0; i--) {
int t = i + 1;
while (t < size && heights[t] >= heights[i]) t = minRightIndex[t];
minRightIndex[i] = t;
}
int result = 0;
for (int i = 0; i < size; i++) {
int sum = heights[i] * (minRightIndex[i] - minLeftIndex[i] - 1);
result = max(sum, result);
}
return result;
}
};
今日总结
这次的题学习时长2h,思路也很妙。
准备论文计划和开题。