【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;
};
相关推荐
行走的陀螺仪34 分钟前
【转型攻略】2026 年,后端 / 全栈工程师转 AI Agent 方向:能力地图、按周学习路线与面试要点
人工智能·面试·职场和发展
小蒋观天下1 小时前
雷击与浪涌防护:前端SPD选型、接地网误区,接地不当反而引入干扰
深度学习·算法·机器学习
WBluuue3 小时前
数据结构与算法:分块(一):块状数组、块状链表
数据结构·c++·算法·链表
圣保罗的大教堂3 小时前
leetcode 3619. 总价值可以被 K 整除的岛屿数目 中等
leetcode
澳鹏Appen4 小时前
澳鹏重磅发布ExamOCRBench:面向端到端试卷判分的多任务基准
算法·benchmark·基准评测
benjormin4 小时前
Java数据结构 二叉搜索树
数据结构·算法
人工智能培训4 小时前
知识图谱:结构化表达实体与关系的知识组织技术
大数据·人工智能·算法·重构·生活·知识图谱
地平线开发者5 小时前
QAT 实战:从 PyTorch 模型到 J6E 实板精度与延时验证
pytorch·算法·自动驾驶
IT星宿5 小时前
github-gravity:用 Rapier2D 把 GitHub 贡献图做成 SVG 物理动画
算法·github