设为首页 加入收藏

TOP

寻找直方图中面积最大的矩形(C语言版)
2014-11-23 21:12:30 来源: 作者: 【 】 浏览:5
Tags:寻找 方图中 面积 最大 矩形 语言

注:我是用循环实现的,肯定不是最优的算法,欢迎留言讨论。(题目来自庞果网)

题目详情:

给定直方图,每一小块的height由N个非负整数所确定,每一小块的width都为1,请找出直方图中面积最大的矩形。


如下图所示,直方图中每一块的宽度都是1,每一块给定的高度分别是[2,1,5,6,2,3]:


\


< http://www.2cto.com/kf/ware/vc/" target="_blank" class="keylink">vcD4KPC9ibG9ja3F1b3RlPgo8L2Jsb2NrcXVvdGU+CjxwPgogICDEx8O0yc/K9taxt73NvNbQo6zD5rv91+6087XEvtjQzrHjysfPws28y/nKvrXE0vXTsLK/t9a1xMPmu/2jrMPmu/09IDEwtaXOu6GjPC9wPgo8YmxvY2txdW90ZT4KPGJsb2NrcXVvdGU+CjxwPgo8YnI+CjwvcD4KPGJsb2NrcXVvdGU+CjxwPgo8aW1nIHNyYz0="http://www.cppentry.com/upload_files/article/45/1_wg4kn__.png" alt="\">


请完成函数largestRectangleArea,实现寻找直方图中面积最大的矩形的功能,如当给定直方图各小块的高度= [2,1,5,6,2,3] ,返回10。

解题代码:

int minElement(const int *h, int b, int e)
{
    int min = h[b++];
    for (; b < e; ++b)
    {
        if (h[b] < min)
            min = h[b];
    }
    return min;
}

int largestRectangleArea(const int *height,int n) {
    int max = 0;
    int min = 0;
    int i, j;
    for (i = 0; i < n; ++i)
    {
        for (j = i; j < n; ++j)
        {
            min = minElement(height, i, j + 1);
            if ((j+1-i)*min > max)
            {
                max = (j+1-i)*min;
            }
        }
    }
    return max;
}



】【打印繁体】【投稿】【收藏】 【推荐】【举报】【评论】 【关闭】 【返回顶部
分享到: 
上一篇[ndk,2]ndk开发案例和错误处理 下一篇Windows下的函数hook技术

评论

帐  号: 密码: (新用户注册)
验 证 码:
表  情:
内  容: