LeetCode HOT100 - 柱状图中最大的矩形
其实有点奇怪这个题单为什么把这题放在前面一题的后面,这个应该算是 easy 版本,或者那道最大矩形是这题的变种
那就再写一些部分
比如前一篇题解提到栈中的元素是贡献还没处理完的
而它的贡献就是在出栈的时候算的
例如栈中是 2 4
那么出栈的时候下标 4 的元素作用的区间就是 [3, i - 1]
因为下标 2 和 下标 i 的元素都比下标 4 的元素大
还有就是单调栈一般都是严格单调递减/递增栈
这是因为这样元素的意义更加明确,比如就是最右侧的元素,然后逻辑是左右第一个小于它的元素
并且代码的设置是能保证相同元素的处理是正确的,因为比如相同的一直弹出,那么左侧的实际上就是第一个小于这批相同元素的
class Solution {
public:
int largestRectangleArea(vector<int>& a) {
int ans = 0;
int n = a.size();
vector<int> st;
for (int i = 0; i <= n; i++) {
int cur = i == n ? 0 : a[i];
while (!st.empty() && a[st.back()] >= cur) {
int mid = st.back();
st.pop_back();
ans = max(ans, a[mid] * (i - (st.empty() ? -1 : st.back()) - 1));
}
st.emplace_back(i);
}
return ans;
}
};

浙公网安备 33010602011771号