单调栈的最典型用法,下面的代码可以作为单调栈的模版进行记忆:
- 注意其中第18行在数组最后添加了一个0,这么做可以保证遍历最后一个元素时栈被清空,大大简化了代码
// // Created by jt on 2020/9/24. // #include <vector> #include <stack> using namespace std; class Solution { public: /** * * @param height int整型vector * @return int整型 */ int largestRectangleArea(vector<int>& height) { // write code here stack<int> stk; height.push_back(0); // 简化代码,确保栈最后会被清空 int maxVal = 0; for (int i = 0; i < height.size(); ++i) { while (!stk.empty() && height[i] < height[stk.top()]) { int h = height[stk.top()]; stk.pop(); int leftIdx = stk.empty() ? -1 : stk.top(); int w = i - leftIdx - 1; maxVal = max(maxVal, h * w); } stk.push(i); } return maxVal; } };