以下是一个用C++实现的求最大矩形面积的算法:

#include <iostream>
#include <stack>
#include <vector>

using namespace std;

int largestRectangleArea(vector<int>& heights) {
    stack<int> stk;
    int maxArea = 0;
    int i = 0;
    
    while (i < heights.size()) {
        if (stk.empty() || heights[i] >= heights[stk.top()]) {
            stk.push(i);
            i++;
        }
        else {
            int top = stk.top();
            stk.pop();
            int area = heights[top] * (stk.empty() ? i : i - stk.top() - 1);
            maxArea = max(maxArea, area);
        }
    }
    
    while (!stk.empty()) {
        int top = stk.top();
        stk.pop();
        int area = heights[top] * (stk.empty() ? i : i - stk.top() - 1);
        maxArea = max(maxArea, area);
    }
    
    return maxArea;
}

int main() {
    vector<int> heights = {2, 1, 5, 6, 2, 3};
    int area = largestRectangleArea(heights);
    cout << "最大矩形面积为: " << area << endl;
    
    return 0;
}

这个算法的思路是使用一个栈来存储递增的高度序列的索引,当遇到一个比栈顶元素小的高度时,就将栈顶元素弹出,并计算以该高度为最低高度的矩形的面积。然后将当前元素的索引入栈,继续遍历数组。最后,如果栈不为空,就将栈中剩余元素依次弹出,并计算以这些高度为最低高度的矩形的面积。最大的面积即为所求的最大矩形面积

最大矩形面积c++

原文地址: https://www.cveoy.top/t/topic/h6vJ 著作权归作者所有。请勿转载和采集!

免费AI点我,无需注册和登录