代码随想录算法训练营第四十七天|42. 接雨水、84.柱状图中最大的矩形
题目链接42. 接雨水、解题思路双指针按列计算具体思路首先初始化两个与 height 长度一致的数组 maxleft 和 maxright maxleft[i] 表示第 i 个位置左侧的最大柱子高度 maxright[i] 表示第 i 个位置右侧的最大柱子高度先从左到右遍历填充 maxleft maxleft[0] 初始化为 height[0]后续每个位置取前一个位置的 maxleft 值和当前高度的最大值再从右到左遍历填充 maxrightmaxright[ height.size() - 1] 初始化为 height 最后一个元素后续每个位置取后一个位置的 maxright 值和当前高度的最大值最后遍历每个位置计算该位置能接的雨水量 min(maxleft[i]maxright[i]) - height[i]仅当结果为正数时累加到总水量 ans 中最终返回 ans 即为能接的雨水总量。具体代码class Solution { public: int trap(vectorint height) { vectorint maxleft(height.size(), 0); vectorint maxright(height.size(), 0); maxleft[0] height[0]; for (int i 1; i height.size(); i) maxleft[i] max(maxleft[i - 1], height[i]); maxright[height.size() - 1] height[height.size() - 1]; for (int i height.size() - 2; i 0; i--) maxright[i] max(maxright[i 1], height[i]); int ans 0; for (int i 0; i height.size(); i) { if (min(maxleft[i], maxright[i]) - height[i] 0) ans min(maxleft[i], maxright[i]) - height[i]; } return ans; } };时间复杂度On空间复杂度On解题思路单调栈按行计算具体思路首先初始化单调递减栈存储 height 的索引保证栈内索引对应柱子高度单调递减将第一个索引 0 压入栈初始化总接水量 ans 为 0遍历索引从 1 到 height 末尾若栈非空且当前柱子高度 height[i] 大于栈顶索引对应高度说明找到凹槽的右边界弹出栈顶索引作为凹槽底部 mid若弹出后栈为空无左边界无法接水则跳出循环否则计算该凹槽的有效接水高度 h(左边界 stack.top() 和右边界 i 对应高度的较小值 - 凹槽底部 mid 对应高度)、有效接水宽度 w(右边界索引 i - 左边界索引stack.top() - 1)将 h * w 累加到总水量 ans重复该循环直到栈为空或当前高度不大于栈顶索引对应高度再将当前索引 i 压入栈以维持栈的单调递减特性遍历完成后ans 即为能接的雨水总量。具体代码class Solution { public: int trap(vectorint height) { stackint stack; stack.push(0); int ans 0; for (int i 1; i height.size(); i) { while(!stack.empty() height[i] height[stack.top()]) { int mid stack.top(); stack.pop(); if (stack.empty()) break; int h min(height[stack.top()], height[i]) - height[mid]; int w i - stack.top() - 1; ans h * w; } stack.push(i); } return ans; } };时间复杂度On空间复杂度On题目链接84.柱状图中最大的矩形解题思路单调栈具体思路首先在 heights 数组头部插入 0、尾部追加 0确保所有柱子都能被触发计算对应的最大矩形无需单独处理栈空 / 遍历结束的边界情况初始化单调递增栈存储数组索引保证栈内索引对应柱子高度单调递增并将第一个索引 0 压入栈初始化最大面积 ans 为 0遍历索引 i 从 1 到处理后 heights 的末尾若当前柱子高度 heights[i] 小于栈顶索引对应高度说明找到栈顶索引柱子的右边界弹出栈顶索引作为矩形高度对应的 mid计算以 heights[mid] 为高的矩形面积(宽度为右边界索引 i - 左边界索引stack.top() - 1高度为 heights[mid]并更新 ans 为当前 ans 和该面积的最大值重复该循环直到当前高度不小于栈顶索引对应高度再将当前索引 i 压入栈以维持栈的单调递增特性遍历完成后 ans 即为柱状图中能勾勒出的最大矩形面积。具体代码class Solution { public: int largestRectangleArea(vectorint heights) { stackint stack; heights.insert(heights.begin(), 0); heights.push_back(0); int ans 0; stack.push(0); for (int i 1; i heights.size(); i) { while(heights[i] heights[stack.top()]) { int mid stack.top(); stack.pop(); ans max(ans, (i - stack.top() - 1) * heights[mid]); } stack.push(i); } return ans; } };时间复杂度On空间复杂度On

相关新闻

高瘦男士西装定制干货:如何通过驳领宽度与胸围比例修饰身材

高瘦男士西装定制干货:如何通过驳领宽度与胸围比例修饰身材

作为深耕男装行业十年的从业者,我每年拆解超过50套西装,走访过长三角、珠三角十余家代工厂。今天从版型工程师的视角,带大家深度解析高瘦男士如何通过驳领宽度与胸围比例的精准控制,实现视觉上的身材优化。本文将以码尚定制为核心…

2026/7/6 13:50:54 阅读更多 →
COMSOL二维固体力学中裂缝挤压闭合的研究

COMSOL二维固体力学中裂缝挤压闭合的研究

comsol二维固体力学裂缝挤压闭合。最近在研究COMSOL的二维固体力学模块,特别是关于裂缝挤压闭合的模拟。这个问题的核心在于如何准确地模拟裂缝在外部压力作用下的闭合过程。首先,我们需要定义一个二维几何模型,通常是一个带有裂缝的矩形板。…

2026/7/7 7:21:37 阅读更多 →
Java学习周记01|环境搭建/基础语法/数组/方法

Java学习周记01|环境搭建/基础语法/数组/方法

Java学习周记01|环境搭建/基础语法/数组/方法 前言 这是鼠鼠第一次写博客,希望通过这种方式记录自己的Java学习历程并督促自己每周总结复习,如果文章中有任何问题欢迎大佬们指正。 Java学习部分 写在前面:如果你的电脑只有c盘进行下面的安…

2026/5/17 11:08:01 阅读更多 →

最新新闻

CCS Theia 安装多版本编译器.LTS

CCS Theia 安装多版本编译器.LTS

1.下载需要安装的编译器2.下载需要的版本:如:ti_cgt_c2000_22.6.3.LTS_windows-x64_installer.exe双击安装3.把需要安装的编译器安装到 CCS 的根目录,如:D:/ti如果有安装好的可以复制:把需要安装的编译器复制到 CCS 的…

2026/7/8 3:53:53 阅读更多 →
量化软件对比别只看排名:普通用户要拆三类工具

量化软件对比别只看排名:普通用户要拆三类工具

量化软件对比里,排名常常不如分类有用。普通用户先看能不能读懂规则、回测、提醒和风控;技术用户再看数据接口、策略函数和日志;接近实盘执行的人还要核对券商权限、委托和成交。牛股王股票这类面向普通投资者的量化辅助软件,适合…

2026/7/8 3:53:53 阅读更多 →
虚拟角色AI助手开发指南:从设定到工程化实现

虚拟角色AI助手开发指南:从设定到工程化实现

🚀 30款热门AI模型一站整合,DeepSeek/GLM/Qwen 随心用,限时 5 折。 👉 点击领海量免费额度 1. 先搞清楚这个标题到底在说什么 看到这个标题,很多人第一反应可能是“这是什么游戏角色还是AI助手?”其实这…

2026/7/8 3:53:53 阅读更多 →
B站视频转换终极指南:5分钟拯救你的珍贵缓存视频

B站视频转换终极指南:5分钟拯救你的珍贵缓存视频

B站视频转换终极指南:5分钟拯救你的珍贵缓存视频 【免费下载链接】m4s-converter 一个跨平台小工具,将bilibili缓存的m4s格式音视频文件合并成mp4 项目地址: https://gitcode.com/gh_mirrors/m4/m4s-converter 你是否曾有过这样的经历&#xff1f…

2026/7/8 3:51:52 阅读更多 →
计算机毕业设计之健康管理系统

计算机毕业设计之健康管理系统

随着信息技术和网络技术的飞速发展,人类已进入全新信息化时代,传统管理技术已无法高效,便捷地管理信息。为了迎合时代需求,优化管理效率,各种各样的管理系统应运而生,各行各业相继进入信息管理时代&#xf…

2026/7/8 3:49:52 阅读更多 →
当 AI 生成的样式需要一间独立房间:Shadow DOM 与 CSS Modules 的样式隔离对决

当 AI 生成的样式需要一间独立房间:Shadow DOM 与 CSS Modules 的样式隔离对决

当 AI 生成的样式需要一间独立房间:Shadow DOM 与 CSS Modules 的样式隔离对决 一、深度引言与场景痛点 AI 生成的组件代码带着自己的样式行李——一段 CSS 声明打包在组件内部,颜色、间距、字号都是自给自足的。当这段代码进入设计系统仓库,…

2026/7/8 3:45:51 阅读更多 →

日新闻

3大核心能力重塑《明日方舟》游戏体验:MAA自动化助手的革命性突破

3大核心能力重塑《明日方舟》游戏体验:MAA自动化助手的革命性突破

3大核心能力重塑《明日方舟》游戏体验:MAA自动化助手的革命性突破 【免费下载链接】MaaAssistantArknights 《明日方舟》小助手,全日常一键长草!| A one-click tool for the daily tasks of Arknights, supporting all clients. 项目地址: …

2026/7/8 0:00:48 阅读更多 →
MyBatis 批量操作深度优化——从 N+1 到批处理的全路径

MyBatis 批量操作深度优化——从 N+1 到批处理的全路径

MyBatis 批量操作深度优化——从 N1 到批处理的全路径 一、从"功能正确"到"性能可接受"——MyBatis 批量操作的三段式进化 MyBatis 在日常增删改查场景中几乎是无感的——实体映射直观、SQL 控制灵活。但当数据量从千级上升到十万级、百万级,许…

2026/7/8 0:00:48 阅读更多 →
工业负载控制方案:TPD2015FN与PIC18F45K22应用解析

工业负载控制方案:TPD2015FN与PIC18F45K22应用解析

1. 工业负载控制方案概述在工业自动化、电机驱动和照明控制等高需求场景中,可靠地控制电感和电阻负载是核心挑战之一。TPD2015FN作为东芝的8通道高端智能功率开关IC,配合PIC18F45K22微控制器,能够构建一套稳定、高效的负载控制系统。这套组合…

2026/7/8 0:02:48 阅读更多 →

周新闻

B站视频下载神器BiliTools:5分钟学会轻松保存任何B站内容

B站视频下载神器BiliTools:5分钟学会轻松保存任何B站内容

B站视频下载神器BiliTools:5分钟学会轻松保存任何B站内容 【免费下载链接】BiliTools A cross-platform bilibili toolbox. 跨平台哔哩哔哩工具箱,支持下载视频、番剧等等各类资源 项目地址: https://gitcode.com/GitHub_Trending/bilit/BiliTools …

2026/7/7 14:24:45 阅读更多 →
威胁模型全解析:从新手入门到实战应用,助你构建安全产品!

威胁模型全解析:从新手入门到实战应用,助你构建安全产品!

威胁模型的陌生现状在忙碌疲惫的一天里,参与了关于混合后量子密码学的讨论,应付端点攻击找茬的人,还参与留言板讨论后,发现“威胁模型”对多数人仍是陌生概念,且多被当作时髦用语。有趣的相关画作有一幅由 Embyr 创作的…

2026/7/7 12:34:47 阅读更多 →
渗透测试入门指南:从零基础到实战环境搭建

渗透测试入门指南:从零基础到实战环境搭建

1. 从“看热闹”到“入门”:我理解的渗透测试到底是什么?每次看到新闻里说某个大公司的数据被“黑”了,或者某个网站被攻击导致服务瘫痪,你是不是和我一样,心里会冒出两个念头:一是“这黑客真厉害”&#x…

2026/7/7 15:59:06 阅读更多 →

月新闻