84. 柱状图中最大的矩形

84. 柱状图中最大的矩形

双指针

java 复制代码
class Solution {
    public int largestRectangleArea(int[] heights) {
        int n = heights.length;
        int[] minLeftIndex = new int[n];
        int[] minRightIndex = new int[n];

        minLeftIndex[0] = -1;
        for(int i = 1; i < n; i++){
            int t = i - 1;
            while(t >= 0 && heights[t] >= heights[i]) t = minLeftIndex[t];
            minLeftIndex[i] = t;
        }

        minRightIndex[n - 1] = n;
        for(int i = n - 2; i >= 0; i--){
            int t = i + 1;
            while(t < n && heights[t] >= heights[i]) t = minRightIndex[t];
            minRightIndex[i] = t;
        }

        int res = 0, sum = 0;
        for(int i = 0; i < n; i++){
            sum = heights[i] * (minRightIndex[i] - minLeftIndex[i] - 1);
            res = Math.max(res, sum);
        }

        return res;
    }
}

单调栈

java 复制代码
class Solution {
    public int largestRectangleArea(int[] heights) {
        int len = heights.length + 2;
        int[] newHeight = new int[len];
        for(int i = 1; i < len - 1; i++) newHeight[i] = heights[i - 1];

        Deque<Integer> stack = new ArrayDeque<>();
        stack.push(0);

        int res = 0;
        for(int i = 1; i < len; i++){
            while(!stack.isEmpty() && newHeight[i] < newHeight[stack.peek()]){
                int mid = stack.pop();
                int h = newHeight[mid];
                int w = i - stack.peek() - 1;
                res = Math.max(res, h * w);
            }
            stack.push(i);
        }

        return res;
    }
}
相关推荐
墨染点香7 小时前
LeetCode 刷题【68. 文本左右对齐】
算法·leetcode·职场和发展
GalaxyPokemon7 小时前
LeetCode - 202. 快乐数
算法·leetcode·职场和发展
吃着火锅x唱着歌7 小时前
LeetCode 522.最长特殊序列2
算法·leetcode·职场和发展
初级炼丹师(爱说实话版)7 小时前
2025算法八股——机器学习——SVM损失函数
算法·机器学习·支持向量机
qq_4696035897 小时前
2026新选题:基于K-Means实现学生求职意向聚类推荐职位
算法·kmeans·聚类·聚类算法·k-means聚类推荐
RTC老炮7 小时前
webrtc弱网-LossBasedBweV2类源码分析与算法原理
算法·webrtc
NMZH107 小时前
排序算法(全--C语言)
算法·排序算法
對玛祷至昏8 小时前
算法学习路径
学习·算法·排序算法
Yingye Zhu(HPXXZYY)12 小时前
ICPC 2023 Nanjing R L 题 Elevator
算法
程序员Xu15 小时前
【LeetCode热题100道笔记】二叉树的右视图
笔记·算法·leetcode