题目来源于:http://blog.chinaunix.net/uid-29038263-id-4198455.html
给定n块木板A[1...n],高度记为A[i],每块目标高度不等,宽度相等,用这些木板排列成一面木板墙,木板排列好后,求解木板墙中最大的矩形面积,请设计算法求得木板墙最大的矩形面积,并分析算法效率。
举例说明,如下图所示的木板排列,最大矩形面积为深灰色区域,即4*3=12。
自己写的时间复杂度为o(n)的解法
#include <iostream>
using namespace std;
int GreatestMultiplyOfSubarrays(int *pData, int length)
{
int multiply=0, prevMultiply=0 ,max=0, minValue=0;
int temp=0;
for(int i=0; i<length; i++){
if(i==0 || multiply ==0 || multiply == 1 || multiply==prevMultiply){
if(multiply==prevMultiply)
prevMultiply = -1;
temp=i;
multiply=pData[i];
minValue=pData[i];
}else{
if(pData[i] == 1){
continue;
}
if(pData[i]<minValue)
minValue=pData[i];
prevMultiply = multiply;
multiply=(i-temp+1)*minValue;
}
if(multiply>max){
max=multiply;
}
}
return max;
}
int main()
{
int a[]={1,2,3,0,4,1,4,7};
int b[]={6, 4, 5, 0, 2, 7, 1, 2};
cout<<"max in a"<<endl;
cout<<GreatestMultiplyOfSubarrays(a,sizeof(a)/sizeof (*a))<<endl;
cout<<"max in b"<<endl;
cout<<GreatestMultiplyOfSubarrays(b,sizeof(b)/sizeof (*b))<<endl;
system("pause");
return 0;
}