力扣HOT100 - 84. 柱状图中最大的矩形

解题思路:

单调栈

对于一个高度height[ i ],找左右两边均严格小于它的值。

java 复制代码
class Solution {
    public int largestRectangleArea(int[] heights) {
        int n = heights.length;
        int[] left = new int[n];
        int[] right = new int[n];
        Deque<Integer> mono_stack = new ArrayDeque<>();
        for (int i = 0; i < n; i++) {
            while (!mono_stack.isEmpty() && heights[mono_stack.peek()] >= heights[i]) {
                mono_stack.pop();
            }
            left[i] = (mono_stack.isEmpty() ? -1 : mono_stack.peek());
            mono_stack.push(i);
        }
        mono_stack.clear();
        for (int i = n - 1; i >= 0; i--) {
            while (!mono_stack.isEmpty() && heights[mono_stack.peek()] >= heights[i]) {
                mono_stack.pop();
            }
            right[i] = (mono_stack.isEmpty() ? n : mono_stack.peek());
            mono_stack.push(i);
        }
        int ans = 0;
        for (int i = 0; i < n; i++) {
            ans = Math.max(ans, (right[i] - left[i] - 1) * heights[i]);
        }
        return ans;
    }
}
相关推荐
TracyCoder1238 小时前
LeetCode Hot100(2/100)——49. 字母异位词分组 (Group Anagrams)。
算法·leetcode
cheems95278 小时前
【javaEE】文件IO
java
lixinnnn.8 小时前
字符串拼接:Cities and States S
开发语言·c++·算法
AI街潜水的八角8 小时前
医学图像算法之基于MK_UNet的肾小球分割系统3:含训练测试代码、数据集和GUI交互界面
算法
larance8 小时前
方差和标准差
人工智能·算法·机器学习
微露清风8 小时前
系统性学习Linux-第一讲-Linux基础指令
java·linux·学习
TracyCoder1238 小时前
LeetCode Hot100(3/100)——128.最长连续序列
算法·leetcode
tqs_123458 小时前
tcc中的空回滚和悬挂问题
java·数据库
MX_93598 小时前
以配置非自定义bean来演示bean的实例化方式
java·开发语言·后端
哪里不会点哪里.8 小时前
Spring 事务机制详解:原理、传播行为与失效场景
java·数据库·spring