来源
曲直
描述
给定n个非负整数,代表柱状图上每个柱的高度(宽度均为1),求这个柱状图中最大的矩形面积。例如对于输入"2 1 5 6 2 3",最大面积为10(见下图)
关于输入
第一行是一个整数n,代表有多少个柱形,n小于等于20000
第二行有n个整数,依次为每个柱形的高度
关于输出
一个数字,即这个柱状图中最大的矩形面积,面积最大不超过int的表示范围
例子输入
6
2 1 5 6 2 3
例子输出
10
#include<iostream>
#include<algorithm>
using namespace std;
int vec[20000] = { 0 };
int main()
{
int n;
int max_area = 0;//最大面积
cin >> n;
cin.ignore();
for (int i = 0; i < n; i++)
{
cin >> vec[i];
}
for (int i = 0; i < n; i++)
{
int min_num = vec[i];//从当前i开始遍历矩形大小
for (int j = i; j < n; j++)
{
int height = min(min_num, vec[j]);//更新高度
int area = (j - i + 1) * height;//更新面积
min_num = height;//最小的高度
max_area = max(area, max_area);//最大的面积
}
}
cout << max_area << endl;
return 0;
}