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

算法-js-柱状图中最大的矩形

题:给定非负整数数组 heights ,数组中的数字用来表示柱状图中各个柱子的高度。每个柱子彼此相邻,且宽度为 1 。求在该柱状图中,能够勾勒出来的矩形的最大面积。

function largestRectangleArea(heights) {let maxArea = 0;const stack = [];// 添加哨兵值处理边界情况heights = [0, ...heights, 0];for (let i = 0; i < heights.length; i++) {// 当当前高度小于栈顶高度时,计算面积while (stack.length && heights[i] < heights[stack[stack.length - 1]]) {const cur = stack.pop();const left = stack[stack.length - 1];const width = i - left - 1;maxArea = Math.max(maxArea, width * heights[cur]);}stack.push(i);}return maxArea;
}// 示例测试
console.log(largestRectangleArea([2,1,5,6,2,3])); // 输出 10
console.log(largestRectangleArea([2,4]));         // 输出 4

算法原理说明:
单调递增栈:维护一个存储柱状图索引的栈,保证栈中索引对应的柱子高度单调递增

关键操作:
当遇到较小高度时,弹出栈顶元素作为当前高度
计算宽度:当前索引 - 新栈顶索引 - 1
面积计算:高度 * 宽度

哨兵技巧:
在数组首尾添加0作为边界哨兵
避免处理空栈的特殊情况
确保所有柱子都会被计算

复杂度分析:
时间复杂度:O(n),每个元素最多入栈和出栈一次
空间复杂度:O(n),最坏情况下需要存储所有元素的索引

相关文章:

  • Qt如何设置图标
  • 【PyQt5实战】五大对话框控件详解:从文件选择到消息弹窗
  • 等于和绝对等于的区别
  • CHAIN-OF-TABLE: 推理链中的演化表格用于表格理解
  • 智慧园区数据大脑管理平台整体解决方案
  • USB学习【11】STM32 USB初始化过程详解
  • 有源晶振与无源晶振 旁路模式与非旁路模式 深度剖析
  • 2009-2025计算机408统考真题及解析
  • 【数据结构与算法】ArrayList 与顺序表的实现
  • 济南国网数字化培训班学习笔记-第三组-2-电力通信光缆网认知
  • 20-HAL库
  • 加密芯片法(一)ATSHA204A 特性理解
  • 一次页面假死分析
  • FreeRTOS “探究任务调度机制魅力”
  • 三、关系数据库
  • 垂直智能体:企业AI落地的正确打开方式
  • 仿腾讯会议——房间界面用户设置
  • STM32F10X-中文参考手册2
  • 构建一个“湖仓一体”(Data Lakehouse)系统
  • 八股碎碎念01——HashMap原理
  • 中科院合肥物质院迎来新一届领导班子:刘建国继续担任院长
  • 国际博物馆日|在辽宁省博物馆遇见敦煌
  • 复旦建校120周年大型义诊举行,百余名专家服务市民超三千人次
  • 上海公办小学验证今起开始,下周一和周二分区进行民办摇号
  • 竞彩湃|足总杯决赛或有冷门,德甲欧冠资格之争谁笑到最后
  • 大外交丨3天拿下数万亿美元投资,特朗普在中东做经济“加法”和政治“减法”