pre
1. 题目要求
2. 解答
解答这个题目要注意到,最后画出的矩形,它的高度一定与题目中的某一个矩形的高度相同。于是题目等价转化为在图中可以画出多少个高度为
h
e
i
g
h
t
[
i
]
height[i]
height[i] 的连续矩形。
以图中
h
e
i
g
h
t
[
i
]
height[i]
height[i] 矩形为起始,向左找不低于它的矩形,向右找不低于它的矩形,得到它能画出的最大的矩形个数,乘以矩形高度就是最后的矩形的面积。迭代可以得到题目要求的最大矩形。
#include <iostream>
using namespace std;
int main()
{
int n;
scanf("%d", &n);
int height[n];
for(int i = 0; i < n; i ++) {
scanf("%d", &height[i]);
}
int cnt = 1, max = 0;
for(int i = 0; i < n; i ++) {
for(int p = i - 1; p >= 0; p --)
if(height[i] <= height[p]) cnt ++; else break;
for(int q = i + 1; q < n; q ++)
if(height[q] >= height[i]) cnt ++; else break;
int res = cnt * height[i];
if(res > max) max = res;
cnt = 1;
}
printf("%d", max);
return 0;
}
3. 总结
时间复杂度是
O
(
n
2
)
O(n^2)
O(n2),题目的数据范围最大是
1
0
3
10^3
103,所以可以接受平方级别的复杂度。
这一题还是模拟题。