• 寻找直方图中面积最大的矩形 --- 庞果网



    又来了,今天做了好几道了。。还是庞果网的


    题目详情

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


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



       那么上述直方图中,面积最大的矩形便是下图所示的阴影部分的面积,面积= 10单位。



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

    算法描述

    这题没什么算法,从第一个索引开始,记为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;
    }



  • 相关阅读:
    [置顶] 也论百度轻应用--一个开发者的吐槽
    HDU 1506 Largest Rectangle in a Histogram
    [置顶] 搭建apache+tomcat+memcached集群环境
    (step8.2.6)hdu 1848(Fibonacci again and again——组合博弈)
    SQL2005、2008、2000 清空删除日志
    网络获取北京时间和系统时间
    C++界面库
    Cocos2d-X游戏开发之Windows7+VS2010环境搭建(亲测)
    华为面试题——一道关于指针方面的编程题(C/C++)
    java之Math
  • 原文地址:https://www.cnblogs.com/dyllove98/p/3211786.html
Copyright © 2020-2023  润新知