diff --git "a/lcof2/\345\211\221\346\214\207 Offer II 039. \347\233\264\346\226\271\345\233\276\346\234\200\345\244\247\347\237\251\345\275\242\351\235\242\347\247\257/README.md" "b/lcof2/\345\211\221\346\214\207 Offer II 039. \347\233\264\346\226\271\345\233\276\346\234\200\345\244\247\347\237\251\345\275\242\351\235\242\347\247\257/README.md" index 1b7ca03b1ec9b..8b2a24b0bb90b 100644 --- "a/lcof2/\345\211\221\346\214\207 Offer II 039. \347\233\264\346\226\271\345\233\276\346\234\200\345\244\247\347\237\251\345\275\242\351\235\242\347\247\257/README.md" +++ "b/lcof2/\345\211\221\346\214\207 Offer II 039. \347\233\264\346\226\271\345\233\276\346\234\200\345\244\247\347\237\251\345\275\242\351\235\242\347\247\257/README.md" @@ -63,6 +63,34 @@ ``` +### **C++** + +我们遍历每个柱体,若当前的柱体高度大于等于栈顶柱体的高度,就直接将当前柱体入栈,否则若当前的柱体高度小于栈顶柱体的高度,说明当前栈顶柱体找到了右边的第一个小于自身的柱体,那么就可以将栈顶柱体出栈来计算以其为高的矩形的面积了。 + +```cpp +class Solution { +public: + int largestRectangleArea(vector& heights) { + int maxarea = 0; + stack s; + heights.insert(heights.begin(), 0); + heights.push_back(0); + + for (int i = 0; i < heights.size(); i++) { + while (!s.empty() && heights[i] < heights[s.top()]) { + int h = heights[s.top()]; + s.pop(); + maxarea = max(maxarea, h * (i - s.top() - 1)); + } + + s.push(i); + } + + return maxarea; + } +}; +``` + ### **...** ``` diff --git "a/lcof2/\345\211\221\346\214\207 Offer II 039. \347\233\264\346\226\271\345\233\276\346\234\200\345\244\247\347\237\251\345\275\242\351\235\242\347\247\257/Solution.cpp" "b/lcof2/\345\211\221\346\214\207 Offer II 039. \347\233\264\346\226\271\345\233\276\346\234\200\345\244\247\347\237\251\345\275\242\351\235\242\347\247\257/Solution.cpp" new file mode 100644 index 0000000000000..f379ee5097be3 --- /dev/null +++ "b/lcof2/\345\211\221\346\214\207 Offer II 039. \347\233\264\346\226\271\345\233\276\346\234\200\345\244\247\347\237\251\345\275\242\351\235\242\347\247\257/Solution.cpp" @@ -0,0 +1,21 @@ +class Solution { +public: + int largestRectangleArea(vector& heights) { + int maxarea = 0; + stack s; + heights.insert(heights.begin(), 0); + heights.push_back(0); + + for (int i = 0; i < heights.size(); i++) { + while (!s.empty() && heights[i] < heights[s.top()]) { + int h = heights[s.top()]; + s.pop(); + maxarea = max(maxarea, h * (i - s.top() - 1)); + } + + s.push(i); + } + + return maxarea; + } +}; \ No newline at end of file