zoukankan      html  css  js  c++  java
  • 在柱状图中找最大的矩形

    在柱状图中找最大的矩形:给一组非负的整数来表示一个柱状图,设计一个算法找到最大面积的能适合到柱状图内的矩形。比如,对与这组数,1 2 3 4 1 ,有两种可能的方案,一种是适合到 2 3 4 内的矩形,面积是 2*3;另一种是适合到 3 4 内的矩形,面积是 3*2。你觉得能有O(n)算法吗?

    这是一道Google的面试题。下面给出我的解答方法,我的设定是所有柱状图的高度在0-10之间。

    复制代码
     1 #include <iostream>
     2 #include <vector>
     3 
     4 using namespace std;
     5 
     6 int MaxRectBarChart(vector<int> barChart)
     7 {
     8     int i_areaArray[11] = {};
     9     int i_tempareaArray[11] = {};
    10     vector<int>::iterator iter = barChart.begin();
    11     int max = 0;
    12     for (; iter != barChart.end(); iter++)
    13     {
    14         for (int i = 1; i <= *iter; i++)
    15         {
    16             i_tempareaArray[i] += i;
    17         }
    18         for (int i = *iter + 1; i < 11; i++)
    19         {
    20             if (i_tempareaArray[i] > i_areaArray[i])
    21                 i_areaArray[i] = i_tempareaArray[i];
    22             i_tempareaArray[i] = 0;
    23         }
    24     }
    25     for (int i = 1; i < 11; i++)
    26     {
    27         if (max < i_areaArray[i])
    28             max = i_areaArray[i];
    29     }
    30     return max;
    31 }
    32 
    33 int main()
    34 {
    35     vector<int> iv_highArray;
    36     int i_insert;
    37     while (cin >> i_insert)
    38     {
    39         iv_highArray.push_back(i_insert);
    40     }
    41     cout << "Max Rectangle area is " << MaxRectBarChart(iv_highArray) << endl;
    42     return 0;
    43 }
    复制代码

    还有一道类似的,可以作为上一道题扩展的Google面试题:

    在一个位图中找面积最大的白色矩形:给你一个N*N的黑白位图,找一个面积最大的全白色的矩形。注意了,是一个矩形,不是任意一个白色相连的区域。你的算法能达到O(n*n)吗?

     

     
     
  • 相关阅读:
    HDU 1010 Tempter of the Bone(DFS剪枝)
    HDU 1013 Digital Roots(九余数定理)
    HDU 2680 Choose the best route(反向建图最短路)
    HDU 1596 find the safest road(最短路)
    HDU 2072 单词数
    HDU 3790 最短路径问题 (dijkstra)
    HDU 1018 Big Number
    HDU 1042 N!
    NYOJ 117 求逆序数 (树状数组)
    20.QT文本文件读写
  • 原文地址:https://www.cnblogs.com/Leo_wl/p/2695866.html
Copyright © 2011-2022 走看看