84. 柱状图中最大的矩形
题目链接:https://leetcode.cn/problems/largest-rectangle-in-histogram/description/?source=vscode
建议这两个一起服用
https://www.cnblogs.com/WTSRUVF/p/19045624
https://www.cnblogs.com/WTSRUVF/p/19006576
解析:
单调栈的意义:
- 顺序保持:单调栈能保持元素的相对顺序,适用于需要保留顺序关系的问题。
- 快速访问:通过单调性质,能够快速访问需要的比当前元素大或小的元素(比如左右两边第一个比自己大或者小的元素)。
- 相对最大:比如递增栈可以找到右边与自己相差最大的值(如果一个值比自己小,则就替换了),题目可见:121. 买卖股票的最佳时机 - 力扣(LeetCode)
回到这个题,首先对每个元素,都以自己为基准看最长左右两边能扩展到哪里,其实就是求左右两边第一个比自己小的元素位置
那就保持递增栈,入栈后,前一个元素就是左边第一个比自己小的,被出栈时,入栈的元素就是右边第一个比自己小的
class Solution { public: int largestRectangleArea(vector<int>& heights) { stack<int> st; heights.push_back(-1); int n = heights.size(); st.push(0); int max_area = -1; for (int i = 1; i < n; i++) { while(!st.empty() && heights[st.top()] >= heights[i]) { int j = st.top(); st.pop(); int left = -1; if (!st.empty()) left = st.top(); max_area = max(max_area, (i - left - 1) * heights[j]); } st.push(i); } return max_area; } };
自己选择的路,跪着也要走完。朋友们,虽然这个世界日益浮躁起来,只要能够为了当时纯粹的梦想和感动坚持努力下去,不管其它人怎么样,我们也能够保持自己的本色走下去。

浙公网安备 33010602011771号