您的位置:首页 > 其它

Leetcode:Largest Rectangle in Histogram

2013-07-29 12:16 417 查看
寻找直方图最大面积

对于 index=i 往左寻找第一个比i低的直方图p 往右寻找第一个比i低的直方图q 则以height[i]为高度的面积为 (q-p+1)*height[i];

直接遍历 超时了,可以用使用dp

新建两个数组 left和right 。 left[i]保存 左边第一个比i低得直方图标签 转移方程有 (设left[0]=-1)

int p = i-1;

while(p!=-1)

{

if(height[p]<height[i])

break;

p = left[p];

}

left[i] = p;

大数据 84 milli secs过的

class Solution {
public:
int largestRectangleArea(vector<int> &height) {
// Start typing your C/C++ solution below
// DO NOT write int main() function
int length = height.size();
int* left  = new int[length+1];
int* right = new int[length+1];
left[0]=-1;
right[length-1]=length;
for(int i =1;i<length;i++)
{
int p = i-1;
while(p!=-1)
{
if(height[p]<height[i])
break;
p = left[p];
}
left[i] = p;
}
for(int i= length-2;i>=0;i--)
{
int p = i+1;
while(p!=length)
{
if(height[p]<height[i])
break;
p = right[p];
}
right[i]=p;
}
int result = 0;
for(int i =0;i<length;i++)
{
int sum = (i-left[i]+right[i]-1-i)*height[i];
if(sum>result)
result = sum;
}
return result;
}
};
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: