zoukankan      html  css  js  c++  java
  • Largest Rectangle in Histogram

    Given n non-negative integers representing the histogram's bar height where the width of each bar is 1, find the area of largest rectangle in the histogram.

    Above is a histogram where width of each bar is 1, given height = [2,1,5,6,2,3].

    The largest rectangle is shown in the shaded area, which has area = 10 unit.

    For example,
    Given height = [2,1,5,6,2,3],
    return 10.

    思路:先新建两个数组left和right,left数组用于保存每个矩形的最左边开始的可以和当前矩形形成矩形的最小下标,

    right数组用于保存每个矩形的最右边开始的可以和当前矩形形成矩形的最大下标。

    最后,根据最左最右下标的差值相乘矩形的高度值,求出矩形的最大值。

     1 class Solution {
     2 public:
     3     int max (int a, int b)
     4 {
     5     return a > b ? a : b;
     6 }
     7 int largestRectangleArea(vector<int>& height) {
     8     int n = height.size();
     9     int *left,*right,next,i;
    10     left = (int*)malloc(n * sizeof(int));
    11     right = (int*)malloc(n * sizeof(int));
    12     left[0] = -1;
    13     right[n-1] = n;
    14     for (i=1; i < n; i++){
    15         if (height[i-1] < height[i]){
    16             left[i] = i-1;
    17         }else {
    18             next = i-1;
    19             while (left[next] != -1 && height[left[next]] >= height[i])
    20                 next = left[next];
    21             left[i] = left[next];
    22         }
    23     }
    24     for (i=n-2; i >= 0; i--){
    25         if (height[i+1] < height[i]){
    26             right[i] = i+1;
    27         }else {
    28             next = i+1;
    29             while (right[next] != n && height[right[next]] >= height[i])
    30                 next = right[next];
    31             right[i] = right[next];
    32         }
    33     }
    34     int largest = 0;
    35     for (i=0 ;i < n; i++){
    36         largest = max(largest,height[i] * (right[i]-left[i]-1));
    37     }
    38     return largest;
    39         }
    40 };
  • 相关阅读:
    组合数
    2019牛客暑期多校训练营第一场 E ABBA
    2019牛客暑期多校训练营(第一场) H XOR
    POJ-1742Coins
    POJ 1384 Piggy-Bank
    operator.itemgetter函数
    常用内置模块之itertools
    解决Django REST framework中的跨域问题
    关于模板渲染冲突的问题
    什么是跨域?以及如何解决跨域问题?
  • 原文地址:https://www.cnblogs.com/george-cw/p/4489173.html
Copyright © 2011-2022 走看看