【美团】最大矩形面积(分治法)
给定一组非负整数组成的数组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
输出
10
分治法:最大矩形面积只可能有三种情况:
1. 取决于高度最小的柱子,此时面积等于高度乘总长度;
2. 最大面积出现在高度最小的柱子左边;
3. 最大面积出现在高度最小的柱子右边;
'''
#include<iostream> using namespace std; int sort(int *a,int low,int high) { int min=low; for(int i=low+1;i<=high;i++) { if(a[i]<a[min]) min=i; } return min; } int area(int *a,int low,int high) { int pivot; int area_max; if(low==high) return a[low]; else if(low<high) { int area_1,area_2,area_3; pivot=sort(a,low,high); area_2=(high-low+1)*a[pivot]; area_1=area(a,low,pivot-1); area_3=area(a,pivot+1,high); area_max=(area_1>area_2)?area_1:area_2; area_max=(area_3>area_max)?area_3:area_max; return area_max; } return 0; } int main() { int N; while(cin>>N) { int * p=new int[N]; for(int i=0;i<N;i++) cin>>p[i]; int max=area(p,0,N-1); cout<<max; } }