【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;
};
相关推荐
2501_94673616几秒前
在线考试平台如何选型?从功能、优势与应用场景角度详解
大数据·人工智能·算法
天辛大师16 分钟前
天心大师:不确定中锚定自我,AI生活的哲学命题
人工智能·算法·决策树·机器学习·生活·启发式算法
皓月斯语43 分钟前
B2132 素数对
c++·算法·题解
星轨初途1 小时前
LeetCode 热题 100——day2 字母异位词分组
c++·算法·leetcode
happyprince2 小时前
篇1:整体观 · bitsandbytes项目全貌解读
人工智能·算法
青梅橘子皮2 小时前
STL---map/set... “家族“详解(从使用到底层)(1)
数据结构·算法
让学习成为一种生活方式2 小时前
DNA 甲基化综述(模式、调控与功能)--Current Opinion in Plant Biology
算法
Adios7942 小时前
搜索二维矩阵 II
java·数据结构·算法
-森屿安年-3 小时前
647. 回文子串
c++·算法·动态规划
皓月斯语3 小时前
P5736 【深基7.例2】质数筛
c++·算法·题解