您的位置:首页 > 其它

2014年腾讯实习生招聘最后一题

2014-04-25 11:16 260 查看
题目来源于: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;}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: