当前位置: 首页 > article >正文

OJ练习第101题——柱状图中最大的矩形

柱状图中最大的矩形

力扣链接:84. 柱状图中最大的矩形

题目描述

给定 n 个非负整数,用来表示柱状图中各个柱子的高度。每个柱子彼此相邻,且宽度为 1 。

求在该柱状图中,能够勾勒出来的矩形的最大面积。

示例

在这里插入图片描述

思路

我们先嵌套一层 while 循环来向左找到第一个比柱体 i 高度小的柱体,这个过程是 O(N) 的;

单调增栈,对于栈中的柱体来说,栈中下一个柱体就是左边第一个高度小于自身的柱体。

遍历每个柱体,若当前的柱体高度大于等于栈顶柱体的高度,就直接将当前柱体入栈,否则若当前的柱体高度小于栈顶柱体的高度,说明当前栈顶柱体找到了右边的第一个小于自身的柱体,那么就可以将栈顶柱体出栈来计算以其为高的矩形的面积了。

这里为了代码简便,在柱体数组的头和尾加了两个高度为 0 的柱体。头加0不需要判断栈为空,尾加0可以使前面的都出栈。

Java代码

class Solution {
    public int largestRectangleArea(int[] heights) {
        int[] temp = new int[heights.length + 2];
        System.arraycopy(heights, 0, temp, 1, heights.length);
        
        Deque<Integer> stack = new ArrayDeque<>();
        int area = 0;
        for(int i = 0; i < temp.length; i++) {
            while(!stack.isEmpty() && temp[i] < temp[stack.peek()]) {
                int h = temp[stack.pop()];
                area = Math.max(area, (i - stack.peek() - 1) * h);
            }
            stack.push(i);
        }
        return area;
    }
}

补充

System.arraycopy使用的基本定义
public static void arraycopy(Object src, int srcPos, Object dest, int destPos, int length)

src:源数组;

srcPos:源数组要复制的起始位置;

dest:目的数组;

destPos:目的数组放置的起始位置;

length:复制的长度.


http://www.kler.cn/news/18350.html

相关文章:

  • 数据结构之栈的详解
  • ASP.NET Core Web API用户身份验证
  • 鸿蒙Hi3861学习七-Huawei LiteOS-M(信号量)
  • Linux网络架构: XDP, iptables/netfilter和iproute2/tc/ip/Qdiscs
  • windows环境安装运行kafka
  • Java EE--多线程(二)
  • Linux命令·netstat
  • electron +VUE 获取本地MAC地址
  • 又一起数据泄露事件五个月内的第二次
  • OpenPCDet系列 | 7.PointPillars模型测试KITTI数据集流程解析
  • 文件压缩与解压性能对比 lzop, gzip
  • CentOS 7 常用的命令,你知道多少?
  • 5.9-5.10学习总结
  • PDN Handover流程介绍
  • Java RSA密钥转换,从RSAPrivateKey得到RSAPublicKey
  • HTML5字体集合的实践经验
  • ( 位运算 ) 268. 丢失的数字 ——【Leetcode每日一题】
  • 当生命里有程序来串门——一个北邮信通大一学生的漫谈
  • Linux权限 - 概念与管理 | 文件权限的修改与转让 【详解】
  • 给你安利一款不需要魔法就能免费使用的idea插件Bito-ChatGPT
  • IO-Netty
  • Linux_红帽8学习笔记分享_10(SELinux管理与防火墙)
  • SpringBoot——入门程序的简单介绍
  • wiringPi常用函数
  • 使用 ChatGPT 辅助学习——为自己找一个老师
  • docker部署SpringBoot项目
  • 【sop】基于灵敏度分析的有源配电网智能软开关优化配置(Matlab代码实现)
  • Linux 安装 NFS 实现文件目录共享
  • SpringBoot创建和使用
  • RESTful风格(个人笔记)