又來了,今天做了好幾道了。。還是龐果網的
算法描述
這題沒什麼算法,從第一個索引開始,記爲i,另外一個索引從i開始向右移動,記爲j,找出在 [ i .. j] 範圍內最低的高度,記爲H,那麼面積等於 H*(j-i+1)
遍歷完以後找出最大的面積即可。不知道爲什麼答題時長180分鐘,我害怕還有貓膩,先用小號試了一下然後用大號提交的。。哈哈。。
我看到include的頭文件有stack,估計更優的算法使用了棧吧。
代碼如下
int shortest(vector<int> arr,int start,int end)
{
int shortest=arr[start];
int index=start;
int i;
if(start==end)
{
return index;
}
for(i=start;i<=end;i++)
{
if(shortest>=arr[i])
{
shortest=arr[i];
index=i;
}
}
return index;
}
int largestRectangleArea(vector<int> &height) {
//wirte your code hero
int area=0;
int max=0;
int height_index=0;
for(int i=0;i<height.size();i++)
{
for(int j=i;j<height.size();j++)
{
height_index=shortest(height,i,j);
area=(j-i+1)*(height[height_index]);
if(max < area)
max=area;
}
}
return max;
}