题目详情
给定直方图,每一小块的height由N个非负整数所确定,每一小块的width都为1,请找出直方图中面积最大的矩形。
如下图所示,直方图中每一块的宽度都是1,每一块给定的高度分别是[2,1,5,6,2,3]:
那么上述直方图中,面积最大的矩形便是下图所示的阴影部分的面积,面积= 10单位。
这道题简单,有点类似木桶原理,即最矮的那块矩形决定最终的面积。方法是依次处理每个矩形块,计算该矩形块之前面积最大的矩形,在这个过程中要知道当前矩形前最矮的矩形块。
#include <iostream> using namespace std; int largestRectangleArea(const int *height,int n) { int maxarea=0; int minh=0; int sum=0; for(int i=0;i<n;i++) { minh=height[i]; sum=0; for(int j=i;j>=0;j--) { if(height[j]<minh) minh=height[j]; sum=minh*(i-j+1); if(sum>maxarea) maxarea=sum; } } return maxarea; } int main() { int a[6]={2,1,5,6,2,3}; cout<<largestRectangleArea(a,6)<<endl; return 0; }