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

【Hot100】LeetCode—84. 柱状图中最大的矩形

目录

  • 1- 思路
    • 题目识别
    • 单调栈
  • 2- 实现
    • 84. 柱状图中最大的矩形——题解思路
  • 3- ACM 实现


  • 原题链接:84. 柱状图中最大的矩形

1- 思路

题目识别

  • 识别1 :给定一个数组 heights ,求解柱状图的最大面积

单调栈

  • 使用 Stack 来实现,遍历数组,存入下标。
  • 本题实现的是一个单调递减栈,目标是找一个以当前为基准,左边第一个比这个小的以及右边第一个比该元素小的元素。

2- 实现

84. 柱状图中最大的矩形——题解思路

在这里插入图片描述

class Solution {public int largestRectangleArea(int[] heights) {int len = heights.length;int[] newH = new int[len+2];int index = 1;for(int i = 0 ; i < len;i++){newH[index++] = heights[i];}heights = newH;len = heights.length;Stack<Integer> st = new Stack<>();int res = 0;st.push(0);// 单调栈for(int i = 0 ; i < len;i++){if(heights[i] >= heights[st.peek()]){st.push(i);}else{while(heights[i] < heights[st.peek()]){int mid = st.peek();st.pop();int left = st.peek();int right = i;int h = heights[mid];int width = right-left-1;res = Math.max(res,h*width);}st.push(i);}}return res;}
}

3- ACM 实现

public class maxArea {public static int maxA(int[] heights){int len = heights.length;int[] newH = new int[len+2];int index = 1;for(int i = 1 ; i < len;i++){newH[index++] = heights[i];}heights = newH;len = heights.length;Stack<Integer> st = new Stack<>();int res = 0;st.push(0);// 单调栈for(int i = 0 ; i < len;i++){if(heights[i] >= heights[st.peek()]){st.push(i);}else{while(heights[i] < heights[st.peek()]){int mid = st.peek();st.pop();int left = st.peek();int right = i;int h = heights[mid];int width = right-left-1;res = Math.max(res,h*width);}st.push(i);}}return res;}public static void main(String[] args) {Scanner sc = new Scanner(System.in);String input = sc.nextLine();input = input.replace("[","").replace("]","");String[] parts = input.split(",");int[] nums = new int[parts.length];for(int i = 0 ; i < nums.length;i++){nums[i] = Integer.parseInt(parts[i]);}System.out.println("结果是"+maxA(nums));}
}

相关文章:

  • 北京网站建设多少钱?
  • 辽宁网页制作哪家好_网站建设
  • 高端品牌网站建设_汉中网站制作
  • Rust表达一下中秋祝福,群发问候!
  • 【优化器】Optimizer——深度学习中的优化器是什么作用呢?
  • claude,gpt,通义千问
  • 5. Python之数据类型
  • MATLAB窗口操作常用命令
  • 基于 Delphi 的家庭财务管理系统
  • Linux-mysql5.7-mysql8.0安装包下载及安装教程,二合一
  • 车型展示+接驳体验!苏州金龙海格客车闪耀汉诺威商用车展
  • Android 系统下:普通应用无缝安装,Launcher 应用安装遭遇罕见障碍解析
  • 使用 Java 初步搭建简单Spring 项目框架:
  • Docker和K8S
  • 车辆重识别(关于卷积神经网络一些资料)2024/9/11
  • 【454. 四数相加 II】
  • 【设计模式-外观】
  • 解密AI创作:提升Prompt提示词的提问技巧
  • 03Go 类型总结
  • Javascript设计模式学习之Observer(观察者)模式
  • PHP变量
  • Python实现BT种子转化为磁力链接【实战】
  • Quartz实现数据同步 | 从0开始构建SpringCloud微服务(3)
  • React-Native - 收藏集 - 掘金
  • Spring Boot MyBatis配置多种数据库
  • vue从入门到进阶:计算属性computed与侦听器watch(三)
  • Vue小说阅读器(仿追书神器)
  • 翻译:Hystrix - How To Use
  • 不要一棍子打翻所有黑盒模型,其实可以让它们发挥作用 ...
  • 关于Kubernetes Dashboard漏洞CVE-2018-18264的修复公告
  • 数据库巡检项
  • # Redis 入门到精通(九)-- 主从复制(1)
  • #define
  • #NOIP 2014#Day.2 T3 解方程
  • #进阶:轻量级ORM框架Dapper的使用教程与原理详解
  • (C语言版)链表(三)——实现双向链表创建、删除、插入、释放内存等简单操作...
  • (web自动化测试+python)1
  • (八)Docker网络跨主机通讯vxlan和vlan
  • (第8天)保姆级 PL/SQL Developer 安装与配置
  • (附源码)spring boot基于小程序酒店疫情系统 毕业设计 091931
  • (牛客腾讯思维编程题)编码编码分组打印下标题目分析
  • (译) 理解 Elixir 中的宏 Macro, 第四部分:深入化
  • (转)C#调用WebService 基础
  • (转)Scala的“=”符号简介
  • (总结)Linux下的暴力密码在线破解工具Hydra详解
  • .NET 项目中发送电子邮件异步处理和错误机制的解决方案
  • .net 逐行读取大文本文件_如何使用 Java 灵活读取 Excel 内容 ?
  • .NET/ASP.NETMVC 大型站点架构设计—迁移Model元数据设置项(自定义元数据提供程序)...
  • .NET/C# 中设置当发生某个特定异常时进入断点(不借助 Visual Studio 的纯代码实现)
  • .NET国产化改造探索(一)、VMware安装银河麒麟
  • .NET设计模式(2):单件模式(Singleton Pattern)
  • @Autowired自动装配
  • @reference注解_Dubbo配置参考手册之dubbo:reference
  • @Value获取值和@ConfigurationProperties获取值用法及比较(springboot)
  • [ Algorithm ] N次方算法 N Square 动态规划解决
  • [20171102]视图v$session中process字段含义
  • [AAuto]给百宝箱增加娱乐功能
  • [Ariticle] 厚黑之道 一 小狐狸听故事