【LeetCode热题100(99/100)】柱状图中最大的矩形

题目地址: 链接

根据题目易知,想要形成矩形,至少有一个值是完全使用的,所以可以利用单调栈记录每个值的可扩善(左右任意一侧)的最远距离。

最终,根据每个值最远可扩善距离 * height[i],循环比较完毕后即可获取最大矩形面积

TS 复制代码
function largestRectangleArea(heights: number[]): number {
    const n = heights.length;
    
    const dpLeft = new Array(n).fill(0);
    const dpRight= new Array(n).fill(0);

    const stk = [];
    for(let i = 0; i < n; i ++) {
        let [num, idx] = [0, -1];
        while(stk.length && stk[stk.length - 1][0] >= heights[i]) {
            [num, idx] = stk.pop();
        }
        if(stk.length === 0) dpLeft[i] = i;
        else dpLeft[i] = i - stk[stk.length - 1][1] - 1;
        stk.push([heights[i], i]); 
    }


    let ans = 0;
    stk.length = 0;
    for(let i = n - 1; i >= 0; i --) {
        let [num, idx] = [0, n];
        while(stk.length && stk[stk.length - 1][0] >= heights[i]) {
            [num, idx] = stk.pop();
        }
        if(stk.length === 0) dpRight[i] = n - i - 1;
        else dpRight[i] = stk[stk.length - 1][1] - i - 1;
        stk.push([heights[i], i]); 

        ans = Math.max((dpLeft[i] + dpRight[i] + 1) * heights[i], ans);
    }

    return ans;
};
相关推荐
小羊在睡觉2 小时前
力扣84. 柱状图中最大的矩形
后端·算法·leetcode·golang·go
3DVisionary2 小时前
蓝光三维扫描:医疗制造的精度焦虑怎么解
人工智能·算法·制造·蓝光三维扫描·医疗制造·三维检测·义齿检测
jiayong232 小时前
面试中遇到不熟悉问题的应对策略深度解析
面试·职场和发展
好评笔记2 小时前
机器学习面试八股——常用损失函数
人工智能·深度学习·算法·机器学习·校招
weixin_468466852 小时前
全局与局部注意力机制新手实战指南
人工智能·python·深度学习·算法·自然语言处理·transformer·注意力机制
sheeta19983 小时前
LeetCode 每日一题笔记 日期:2026.05.29 题目:3300. 最小元素
笔记·leetcode
_日拱一卒3 小时前
LeetCode:994腐烂的橘子
java·数据结构·算法·leetcode·深度优先
珂朵莉MM3 小时前
第七届全球校园人工智能算法精英大赛-算法巅峰赛产业命题赛第3赛季优化题--束搜索
人工智能·算法
Omics Pro4 小时前
首个!外源天然产物综合性代谢图谱
数据库·人工智能·算法·机器学习·r语言
JAVA社区4 小时前
Java高级全套教程(十)—— SpringCloudAlibaba超详细实战详解
java·开发语言·spring cloud·面试·职场和发展