当前位置: 首页 > 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),最坏情况下需要存储所有元素的索引

http://www.xdnf.cn/news/521137.html

相关文章:

  • 计算机系统的层次结构
  • 采摘桑葚
  • 中级网络工程师知识点6
  • 掌握生成式 AI 的未来:Google Cloud 全新认证
  • Office 中 VBE 的共同特点与区别
  • 【typenum】 12 类型级数组(array.rs)
  • Node.js 框架
  • 20-HAL库
  • 进程控制总结
  • Spyglass:参数(parameter)及其设置方式
  • 考研数学积分学
  • supervisorctl守护进程
  • PCB设计实践(十九)PCB设计中NPN/PNP选型策略
  • C++(23):容器类<vector>
  • C++控制结构详解:if-else、switch、循环(for/while/do-while)
  • 嵌入式学习笔记 - U(S)ART 模块HAL 库函数总结
  • 开启健康生活的多元养生之道
  • Prism使用消息总线打开窗体的案例(中介者模式)
  • GBS 8.0服装裁剪计划软件在线试用
  • SAPROv5.7
  • Muduo网络库大总结
  • 大语言模型 vs NLTK/SpaCy:NLP工具的代际跃迁与互补之道
  • LORA 微调 - LoRA 介绍与 LoRA 微调指南
  • 最长公共子序列(LCS)
  • 网络编程套接字(二)
  • 17 C 语言数据类型转换与数据溢出回绕详解:隐式转换、显式转换、VS Code 警告配置、溢出回绕机制
  • 并发编程(4)
  • 中山市东区信息学竞赛2025 题目解析
  • CMake调试与详细输出选项解析
  • 基于区块链技术的智能汽车诊断与性能分析