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

073柱状图中最大的矩形

柱状图中最大的矩形

题目链接:https://leetcode.cn/problems/largest-rectangle-in-histogram/?envType=study-plan-v2&envId=top-100-liked

我的解答:

//方法:单调栈 //时间复杂度:O(n) //空间复杂度:O(n) public int largestRectangleArea(int[] heights) { int ans = 0; int n = heights.length; Deque<Integer> stack = new LinkedList<>();//栈中存放下标,从栈底到栈顶的下标对应的高度递增 int ptr = 0; while(ptr < n || !stack.isEmpty()){ if(ptr < n && (stack.isEmpty() || heights[ptr] >= heights[stack.peek()])){ stack.push(ptr); ptr++; } else{ //收集当前栈顶元素的最大贡献度 int top = stack.pop(); int pre = stack.isEmpty() ? -1 : stack.peek(); int devote = heights[top] * (ptr - pre - 1); //更新答案 ans = Math.max(ans, devote); } } return ans; }

分析:代码的时间复杂度为O(n),空间复杂度为O(n)。解题思路:采用单调栈。栈中存放下标,从栈底到栈顶的下标对应的高度递增。遍历heights,若当前位置的高度大于或等于栈顶下标对应的高度,直接将当前位置入栈;若当前位置的高度小于栈顶下标对应的高度,就从栈中弹出一个下标并统计此下标对应位置的最大贡献度(从弹出下标往左找到第一个比它对应高度小的位置,也就是弹出它后的栈顶,假设为left,再从弹出下标往右找到第一个比它对应高度小的位置,也就是当前位置,假设为ptr,那么当前位置的最大贡献度就为:当前位置的高度与(ptr-left-1)的乘积),然后更新答案。重复以上操作直到遍历完heights数组的所有元素并且栈为空即可得出最后的答案。

看了官方题解后的解答:

//方法二:单调栈 + 常数优化 //时间复杂度:O(n) //空间复杂度:O(n) public int largestRectangleArea(int[] heights) { int n = heights.length; int[] left = new int[n]; int[] right = new int[n]; Arrays.fill(right, n); Deque<Integer> stack = new LinkedList<>();//栈中存放下标,从栈底到栈顶的下标对应的高度递增 for(int i=0; i<n; i++){ while(!stack.isEmpty() && heights[i] < heights[stack.peek()]){ right[stack.peek()] = i; stack.pop(); } left[i] = stack.isEmpty() ? -1 : stack.peek(); stack.push(i); } int ans = 0; for(int i=0; i<n; i++){ ans = Math.max(ans, heights[i] * (right[i] - left[i] - 1)); } return ans; }

分析:

​ 1、官方的解题思路与我的解题思路大体一致,但是官方用数组将统计出的每个位置左边第一个高度更小的位置和每个位置右边第一个高度更小的位置存储起来,最后根据两个数组来统计答案。而我的解答在弹出栈中元素时直接计算答案,逻辑上更难理解,在讲述思路时容易显得逻辑不清晰,官方的编码分步骤进行,在面试时更容易阐述思路。

总结

  • 本题主要需要分析出题目的类型,根据“从每个位置向左和向右扩展到的最远位置统计包含当前位置时,所能构成的最大矩阵”将题目转化为了“寻找每个位置往左和往右第一个高度小于当前位置的两个位置”,根据这个,我们就很容易想到单调栈。
http://www.jsqmd.com/news/923137/

相关文章:

  • 从一次lightdm故障修复,聊聊Linux系统服务管理的那些‘坑’与最佳实践
  • YimMenu:GTA V开源辅助工具的技术解析与实践指南
  • 2026年4月洗车机供应商哪家好,水斧全自动洗车机/自助洗车机/高压洗车设备/无刷洗车设备,洗车机公司哪家靠谱 - 品牌推荐师
  • 别再乱点‘诊断启动’!一次Win10系统配置错误引发的BitLocker恢复密钥实战记录
  • 【Gemini社区冷启动实战指南】:20年AI架构师亲授从0到1构建高活跃技术社群的7大关键动作
  • 杭州临安浩雪制冷电器:杭州办公设备回收哪家专业 - LYL仔仔
  • Veo视频中台架构演进全复盘(含2024最新v4.3高可用架构图)
  • 68458
  • 评测全网10款主流降AIGC软件:找到导师推荐的“无痕降AIGC”终极方案
  • Banana Cursor 终极指南:为你的桌面注入活力的香蕉光标主题深度解析
  • 强力防撤回工具:3分钟掌握微信QQ消息永久保存秘诀
  • 低查重AI写教材工具大揭秘,一键生成专业教材,开启教材编写新时代!
  • 如何深度掌握AMD Ryzen调试神器:SMUDebugTool完全实战指南
  • Windows 命令行包管理工具scoop的使用
  • 沈阳雨露恒远客运:新民通勤车租赁怎么联系 - LYL仔仔
  • 苏州蔷薇吊装搬运:苏州道路救援公司 - LYL仔仔
  • 告别论文内耗!百考通AI四步闭环,高效搞定学术写作
  • 人机协作新范式:盘点2026年最受喜爱的的降AIGC工具
  • AI生成教材新趋势!低查重工具助力,实现高效教材编写!
  • 上海A级纳税防水公司哪家靠谱?芮生建设A级纳税彰显正规实力 - 十大品牌榜单
  • 无锡蔷薇动能科技:宜兴靠谱的升降车租赁找哪家 - LYL仔仔
  • 别再死记硬背CNN结构了!用PyTorch从零搭建猫狗分类器,带你理解每一行代码
  • QuickRecorder:让macOS录屏变得简单高效的5个秘密武器
  • 沭阳智赛交通设施:云龙小区划线标线公司 - LYL仔仔
  • Arduino与继电器控制:从玩具钢琴自动化入门嵌入式硬件编程
  • 深入解析Sketch-Find-And-Replace:高效文本处理插件的架构与实践
  • Windows 11终极优化指南:用Win11Debloat一键清理系统垃圾
  • Linux下手动安装MySQL5.7
  • XGBoost + SHAP 一键生成 10 张出版级模型解释图
  • “写不出开头”终结者:Gemini创意写作启动引擎(含12种认知触发模式+情绪温度调节参数),开发者内测版今日紧急放通