int len = heights.length; if (len == 0) { return 0; }
时间: 2024-02-15 07:40:55 浏览: 60
// Initialize variables
int maxArea = 0;
int left = 0;
int right = len - 1;
// Loop through the array using two pointers
while (left < right) {
// Calculate the area of the current rectangle
int area = Math.min(heights[left], heights[right]) * (right - left);
// Update max area if necessary
maxArea = Math.max(maxArea, area);
// Move the pointer that points to the smaller height
if (heights[left] < heights[right]) {
left++;
} else {
right--;
}
}
return maxArea;
相关问题
#include <iostream> #include <stack> #include <vector> using namespace std; int largestRectangleArea(vector<int>& heights) { stack<int> s; int maxArea = 0; int n = heights.size(); for (int i = 0; i <= n; i++) { while (!s.empty() && (i == n || heights[s.top()] >= heights[i])) { int height = heights[s.top()]; s.pop(); int width = s.empty() ? i : i - s.top() - 1; maxArea = max(maxArea, height * width); } s.push(i); } return maxArea; } int main() { vector<int> heights = {1, 1, 1, 1, 1, 1, 1, 1}; cout << largestRectangleArea(heights) << endl; return 0; }手动输入矩阵
抱歉,这段代码是计算给定柱状图中最大矩形面积的程序,并不需要手动输入矩阵。如果您想要编写手动输入矩阵的程序,可以参考以下示例代码:
```
#include <iostream>
#include <vector>
using namespace std;
int main() {
int n, m;
cout << "请输入矩阵的行数和列数: ";
cin >> n >> m;
vector<vector<int>> matrix(n, vector<int>(m));
cout << "请输入矩阵元素: " << endl;
for (int i = 0; i < n; i++) {
for (int j = 0; j < m; j++) {
cin >> matrix[i][j];
}
}
cout << "您输入的矩阵是: " << endl;
for (int i = 0; i < n; i++) {
for (int j = 0; j < m; j++) {
cout << matrix[i][j] << " ";
}
cout << endl;
}
return 0;
}
```
通过该程序,您可以输入矩阵的行数和列数,并手动输入矩阵的元素,最终输出您输入的矩阵。
#include <iostream> #include<vector> #include<algorithm> #include <stack> using namespace std; class Solution{ public: int maximalRectangle(vector<vector<char> >& matrix){ int m = matrix.size(),n = matrix[0].size(); vector<int> heights(n); int res = 0; for(int i = 0; i < m ; i++){ for(int j = 0; j < n;j++){ if(matrix[i][j] == '1') heights[j]++; else heights[j] = 0; } res = max(res,maxArea(heights)); } return res; } int maxArea(vector<int>& heights){ stack<int> stk; int res = 0; heights.push_back(-1); for(int i=0; i < heights.size(); i++){ while(!stk.empty() && heights[i] < heights[stk.top()]){ int idx = stk.top(); stk.pop(); int left = stk.empty()?-1:stk.top(); res =max(res,(i-left-1)*heights[idx]); } stk.push(i); } heights.pop_back( ); return res; } }; int main() { Solution solution; int m,n; cout<<"请输入矩形的行数和列数:"; cin>>m>>n; vector<vector<char> > matrix(m,vector<char>(n)); cout<<"请输入矩形元素(0或1):"<<endl; for(int i=0;i<m;i++){ for(int j=0;j<n;j++) { cin>>matrix[i][j]; } } int maxArea = solution.maximalRectangle(matrix); cout<<"矩形中最大的矩形面积是:"<<maxArea<<endl; return 0; }此代码用到了动态规划吗
这段代码没有直接使用动态规划。它使用了栈来解决最大矩形面积的问题。具体来说,它使用了单调栈算法来找到每个柱子的左右边界,然后计算出以该柱子为高度的矩形的面积。这个过程在循环中进行,每次计算出一个矩形的面积后与当前最大面积进行比较更新。因此,这个问题可以看作是在一维数组中找到最大矩形面积的问题,而不是动态规划。
阅读全文