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

简介: 算法修炼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).符合单调递减的情况时,全部入栈。

相关文章
|
8月前
|
算法 vr&ar 图形学
☆打卡算法☆LeetCode 223. 矩形面积 算法解析
☆打卡算法☆LeetCode 223. 矩形面积 算法解析
|
算法 测试技术 C#
C++前缀和算法应用:矩形区域不超过 K 的最大数值和
C++前缀和算法应用:矩形区域不超过 K 的最大数值和
|
算法 测试技术 C++
C++算法:柱状图中最大的矩形
C++算法:柱状图中最大的矩形
|
7月前
|
算法 JavaScript 前端开发
在JavaScript中实现基本的碰撞检测算法,我们通常会用到矩形碰撞检测,也就是AABB(Axis-Aligned Bounding Box)碰撞检测
【6月更文挑战第16天】JavaScript中的基本碰撞检测涉及AABB(轴对齐边界框)方法,常用于2D游戏。`Rectangle`类定义了矩形的属性,并包含一个`collidesWith`方法,通过比较边界来检测碰撞。若两矩形无重叠部分,四个条件(关于边界相对位置)均需满足。此基础算法适用于简单场景,复杂情况可能需采用更高级的检测技术或物理引擎库。
117 6
|
3月前
|
算法 C++
【算法单调栈】 矩形牛棚(C/C++)
【算法单调栈】 矩形牛棚(C/C++)
|
7月前
|
算法 Python
二维矩形件排样算法之最低水平线搜索算法实现
二维矩形件排样算法之最低水平线搜索算法实现
210 0
|
7月前
|
机器学习/深度学习 移动开发 算法
二维矩形件排样算法之最低水平线算法实现
二维矩形件排样算法之最低水平线算法实现
119 0
|
8月前
|
算法
代码随想录算法训练营第六十天 | LeetCode 84. 柱状图中最大的矩形
代码随想录算法训练营第六十天 | LeetCode 84. 柱状图中最大的矩形
52 3
|
人工智能 算法 BI
|
11天前
|
机器学习/深度学习 算法
基于改进遗传优化的BP神经网络金融序列预测算法matlab仿真
本项目基于改进遗传优化的BP神经网络进行金融序列预测,使用MATLAB2022A实现。通过对比BP神经网络、遗传优化BP神经网络及改进遗传优化BP神经网络,展示了三者的误差和预测曲线差异。核心程序结合遗传算法(GA)与BP神经网络,利用GA优化BP网络的初始权重和阈值,提高预测精度。GA通过选择、交叉、变异操作迭代优化,防止局部收敛,增强模型对金融市场复杂性和不确定性的适应能力。
145 80

热门文章

最新文章