当前位置: 首页 > news >正文

算法修炼Day60|● 84.柱状图中最大的矩形

 LeetCode:84.柱状图中最大的矩形

84. 柱状图中最大的矩形 - 力扣(LeetCode)

1.思路

双指针思路,以当前数组为中心,借助两个数组存放当前数柱左右两侧小于当前数柱高度的索引,进行h*w的计算。注意首尾节点的左侧索引和右侧索引需要单独声名为0.

单调栈,在原数组的基础上定义一个新的数组,对其进行首尾节点的扩容。思路延续收集雨水。

2.代码实现
class Solution {public int largestRectangleArea(int[] heights) {​    Stack<Integer> stack = new Stack<>();​    // 数组扩容​    int[] newHeights = new int[heights.length + 2];​    newHeights[0] = 0;​    newHeights[newHeights.length - 1] = 0;​    for (int i = 0; i < heights.length; i++) {​      newHeights[i + 1] = heights[i];​    }​    heights = newHeights; // 改变数组引用​    stack.add(0);​    int result = 0;​    for (int i = 1; i < heights.length; i++) {​      if (heights[i] > heights[stack.peek()]) { // 入栈​        stack.add(i);​      } else if (heights[i] == heights[stack.peek()]) { ​        stack.pop(); // 弹出​        stack.add(i); // 入栈​      } else {​        while (heights[i] < heights[stack.peek()]) {​          int mid = stack.peek(); // 当前数值柱子​          stack.pop();​          int left = stack.peek();​          int right = i;​          int w = right - left - 1;​          int h = heights[mid];​          result = Math.max(result, w * h);​        }​        stack.add(i);​      }​    }​    return result;}}
3.复杂度分析:

时间复杂度:O(n).

空间复杂度:O(n).符合单调递减的情况时,全部入栈。

http://www.lryc.cn/news/140983.html

相关文章:

  • 前端面试题css(一)
  • .NETCORE中关于swagger的分组
  • 4.1011
  • uniapp中引入axios的错误?
  • Discuz!论坛发帖标题字数限制80字符可以修改吗?修改发帖标题字数的方法
  • R语言画样本不均衡组的箱线图
  • ArcGIS学习总结(19)——要素转点与空间连接(属性表字段映射)
  • 【每日一题Day306】LC228汇总区间 | 双指针
  • vue中实现echarts三维散点图
  • 多头自注意力机制的代码实现
  • 抽象工厂模式
  • 登录校验-Filter-详解
  • 堆栈方法区笔记记录
  • 新版微信小程序获取用户手机号
  • CSS实践 —— 悬浮盒子阴影加上移效果
  • 安全测试基础知识
  • 列表首屏毫秒级加载与自动滚动定位方案
  • 小区物业业主管理信息系统设计的设计与实现(论文+源码)_kaic
  • Fortran 微分方程求解 --ODEPACK
  • 8路光栅尺磁栅尺编码器或16路高速DI脉冲信号转Modbus TCP网络模块 YL99-RJ45
  • 【Python】函数
  • centos安装MySQL 解压版完整教程(按步骤傻瓜式安装
  • 【后端速成 Vue】第一个 Vue 程序
  • Macbook pro M1 安装Ubuntu教程
  • 前端console.log打印内容与后端请求返回数据不一致
  • SQL入门:多表查询
  • 【C++】进一步认识模板
  • Mysql Oracle 区别
  • 华为OD-第K长的连续字母字符串长度
  • 【编程题】有效三角形的个数