首页 > 其他分享 >LeetCode 84. 柱状图中最大的矩形

LeetCode 84. 柱状图中最大的矩形

时间:2024-03-31 13:58:56浏览次数:18  
标签:peek int pop heights 柱状图 isEmpty stack LeetCode 84

解题思路

单调栈经典题型,
    这道题我们需要找到heights[i]左边的最近的比heights[i]小的值,
找到heights[i]右边的最近的比heights[i]小的值。所以我们想到了单调栈。

相关代码

class Solution {
    public int largestRectangleArea(int[] heights) {
        int n = heights.length;
        Stack<Integer> stack = new Stack<>();
        int left[] = new int[n];
        for(int i=0;i<n;i++){
            while(stack.isEmpty()==false&&heights[stack.peek()]>=heights[i]) stack.pop();
            if(stack.isEmpty()==true) left[i]=-1;
            else left[i]=stack.peek();
            stack.push(i);
        }
        //清除栈中的所有元素
        while(stack.isEmpty()==false) stack.pop();
        int right[] = new int[n];
        for(int i=n-1;i>=0;i--){
            while(stack.isEmpty()==false&&heights[stack.peek()]>=heights[i]) stack.pop();
            if(stack.isEmpty()==true) right[i]=n;
            else right[i]=stack.peek();
            stack.push(i);
        }

        int res=0;
        for(int i=0;i<left.length;i++){
            res=Math.max(res,heights[i]*(right[i]-left[i]-1));
        }
        return res;
    }
}

标签:peek,int,pop,heights,柱状图,isEmpty,stack,LeetCode,84
From: https://blog.csdn.net/weixin_55057111/article/details/137022810

相关文章

  • java数据结构与算法刷题-----LeetCode1091. 二进制矩阵中的最短路径
    java数据结构与算法刷题目录(剑指Offer、LeetCode、ACM)-----主目录-----持续更新(进不去说明我没写完):https://blog.csdn.net/grd_java/article/details/123063846文章目录广度优先+双分裂蛇广度优先+双分裂蛇双分裂蛇:是求二维表中从起点到终点的经典思路(也是......
  • java数据结构与算法刷题-----LeetCode95. 不同的二叉搜索树 II
    java数据结构与算法刷题目录(剑指Offer、LeetCode、ACM)-----主目录-----持续更新(进不去说明我没写完):https://blog.csdn.net/grd_java/article/details/123063846文章目录分治回溯+记忆化搜索分治回溯+记忆化搜索卡特兰数,例如对于n个进栈元素,有多少种出栈顺序,......
  • 矩阵置零 - LeetCode 热题 18
    大家好!我是曾续缘......
  • 缺失的第一个正数 - LeetCode 热题 17
    大家好!我是曾续缘......
  • Leetcode算法训练日记 | day9
    一、实现strStr函数1.题目Leetcode:第28题给你两个字符串haystack和needle,请你在haystack字符串中找出needle字符串的第一个匹配项的下标(下标从0开始)。如果needle不是haystack的一部分,则返回 -1。示例1:输入:haystack="sadbutsad",needle="sad"输......
  • Leetcode1681-模拟,位运算
    题目链接:https://leetcode.cn/problems/count-the-number-of-consistent-strings/description/32位int构造出现过的字符集合位运算解法:用按位或(|)构造1个32位的数字集合A存用过的字符,此时对目标串构造字符集合B(有B是A子集,A∪B=A),注意运算优先级 题目:给你一个由不同字符......
  • Leetcode算法训练日记 | day11
    一、有效的括号1.题目Leetcode:第20题给定一个只包括'(',')','{','}','[',']'的字符串s,判断字符串是否有效。有效字符串需满足:1.左括号必须用相同类型的右括号闭合。2.左括号必须以正确的顺序闭合。3.每个右括号都有一个对应的相同类型的左括号。示例1:输入:s="()"......
  • Leetcode算法训练日记 | day10
    一、用栈实现队列1.题目Leetcode:第232题请你仅使用两个栈实现先入先出队列。队列应当支持一般队列支持的所有操作(push、pop、peek、empty):实现MyQueue类:voidpush(intx)将元素x推到队列的末尾intpop()从队列的开头移除并返回元素intpeek()返回队列开头的元素......
  • 算法学习——LeetCode力扣动态规划篇1
    算法学习——LeetCode力扣动态规划篇1509.斐波那契数509.斐波那契数-力扣(LeetCode)描述斐波那契数(通常用F(n)表示)形成的序列称为斐波那契数列。该数列由0和1开始,后面的每一项数字都是前面两项数字的和。也就是:F(0)=0,F(1)=1F(n)=F(n-1)+F(n-2......
  • 每日一练 两数相加问题(leetcode)
    原题如下:这道题目是一道链表题,我们对于这种链表类,很显然我们最后输出的是初始节点,所以我们要保留我们的初始头指针,那么我们的第一步一定是把头指针保留一份,然后再让头指针往后进行操作。那么我们进行什么操作呢,很简单,就是把l1和l2的对应内容加起来就行了,那么我们就面临这样几......