版权声明:本文为博主原创文章,未经博主允许不得转载。 https://blog.csdn.net/zlb872551601/article/details/77686651
[编程题] 最大矩形面积
时间限制:1秒
空间限制:32768K
给定一组非负整数组成的数组h,代表一组柱状图的高度,其中每个柱子的宽度都为1。 在这组柱状图中找到能组成的最大矩形的面积(如图所示)。 入参h为一个整型数组,代表每个柱子的高度,返回面积的值。
输入描述:
输入包括两行,第一行包含一个整数n(1 ≤ n ≤ 10000) 第二行包括n个整数,表示h数组中的每个值,h_i(1 ≤ h_i ≤ 1,000,000)
输出描述:
输出一个整数,表示最大的矩阵面积。
输入例子1:
6 2 1 5 6 2 3
输出例子1:
10
思路:只要就算一下,每个数,能向左向右各扩展几个就行了,
#include<iostream> #include <vector> using namespace std; #include <algorithm> int solve(vector<int >data) { int len = data.size(); int max_area=0; for (int i = 0; i < len;i++) { int left_index = 0; int right_index = 0; for (; i - left_index >= 0;left_index++) { if (data[i - left_index]<data[i]) { break; } } for (; i + right_index <= len - 1; right_index++) { if (data[i + right_index] < data[i]) { break; } } int area = (1 + (left_index -1)+ (right_index-1))*data[i]; max_area = max(max_area, area); } return max_area; } int main() { int n;vector<int >data; while (cin>>n) { int temp; for (int i = 0; i < n;i++) { cin >> temp; data.push_back(temp); } int res = solve(data); cout << res << endl; //return 0; } return 0; }