• 首页 首页 icon
  • 工具库 工具库 icon
    • IP查询 IP查询 icon
  • 内容库 内容库 icon
    • 快讯库 快讯库 icon
    • 精品库 精品库 icon
    • 问答库 问答库 icon
  • 更多 更多 icon
    • 服务条款 服务条款 icon

leetcode做题笔记84柱状图最大的矩形

武飞扬头像
si_mple_
帮助2

给定 n 个非负整数,用来表示柱状图中各个柱子的高度。每个柱子彼此相邻,且宽度为 1 。

求在该柱状图中,能够勾勒出来的矩形的最大面积。

思路一:单调栈

  1.  
    int largestRectangleArea(int* heights, int heightsSize){
  2.  
    int top = -1;
  3.  
    int area, i;
  4.  
    int maxarea = 0;
  5.  
    int *stack = (int *)malloc(sizeof(int) * (heightsSize 2));
  6.  
    int *buff = (int *)malloc(sizeof(int) * (heightsSize 2));
  7.  
     
  8.  
    buff[0] = 0;
  9.  
    for (int i = 1; i <= heightsSize; i ) {
  10.  
    buff[i] = heights[i - 1];
  11.  
    }
  12.  
    buff[heightsSize 1] = 0;
  13.  
     
  14.  
    stack[ top] = 0;
  15.  
    for (i = 1; i < heightsSize 2; i ) {
  16.  
    while (top > 0 && buff[i] < buff[stack[top]]) {
  17.  
    area = (i - stack[top - 1] - 1) * buff[stack[top]];
  18.  
    maxarea = maxarea > area ? maxarea : area;
  19.  
    top--;
  20.  
    }
  21.  
    stack[ top] = i;
  22.  
    }
  23.  
    return maxarea;
  24.  
    }
学新通

分析:

本题利用单调栈的特性,有两种做法,一是直接从中间数向左右进行递归,判断是否单调递增或递减计算答案,第二种是多加一个空间,从最左边或最右边判断是否为单调递增或递减,此做法多设置了一个空间,利用单调栈向左单调递减的特性找最小值计算矩形的最大值,最后输出答案。

总结:

本题考察单调栈相关知识,利用单调递减递归找到最小值计算矩形大小,最后返回最大值

这篇好文章是转载于:学新通技术网

  • 版权申明: 本站部分内容来自互联网,仅供学习及演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系,请提供相关证据及您的身份证明,我们将在收到邮件后48小时内删除。
  • 本站站名: 学新通技术网
  • 本文地址: /boutique/detail/tanhiagheh
系列文章
更多 icon
同类精品
更多 icon
继续加载