尋找直方圖中面積最大的矩形
阿新 • • 發佈:2019-01-04
給定直方圖,每一小塊的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; }