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

leetcode42-接雨水

leetcode 42
在这里插入图片描述

思路

本题使用 单调栈 来计算每个位置能够接住的雨水量

理解问题

题目要求计算一系列柱子之间可以接住的雨水量。输入是一个数组,每个元素代表柱子的高度。输出是一个整数,表示能够接住的水量。

找到边界条件
  • 什么情况下可以接住雨水,水量的计算依赖于柱子两边的高度,即左边界和右边界的高度
  • 确定两边高度后,能够接住的水量 由较低的边界决定
设想解决方案

考虑到要计算每一段之间的水量,可以考虑以下几种方案:

  • 暴力法:对于每一个柱子,遍历找到它左边和右边的最高柱子的高度,计算水量。这个方案复杂度较高(O(n2)),在处理大数据时会变得非常慢
  • 预处理法:可以使用两个数组存储左边和右边每个柱子的最大高度。这种方法的复杂度为 O(n) 时间和 O(n) 空间。但这并不算最优
优化思路

我们可以利用堆栈的应用,来高效的找到边界并计算水量,单调栈就可以巧妙解决此题

  • 单调栈:栈中的柱子会按高度递增。每当遇到比栈顶高的柱子时,就可以弹出栈顶元素计算水量
实现细节

从左到右遍历数组height,每当遇到更高的柱子时,就开始计算水量

  • 弹出栈顶元素,计算当前柱子与新栈顶之间的水量
  • 使用 Math.min 函数确定雨水高度,并计算当前的水量

实现

var trap = function (height) {const len = height.length;// 单调栈const stack = [0];let result = 0;for (let i = 1; i < len; i++) {while (stack.length && height[i] > height[stack[stack.length - 1]]) {const index = stack.pop();if (stack.length) {const diffHeight = Math.min(height[i], height[stack[stack.length - 1]]) - height[index];result += diffHeight * (i - stack[stack.length - 1] - 1)}}stack.push(i);}return result;
};
http://www.xdnf.cn/news/3208.html

相关文章:

  • OCR身份证识别(正反面)_个人证照OCR识别_开放API接口使用指南
  • iVX:数字化转型全场景技术革新与生态构建实践
  • 大连理工大学选修课——机器学习笔记(6):决策树
  • JCRQ1河马算法+消融实验!HO-CNN-LSTM-Attention系列四模型多变量时序预测,作者:机器学习之心
  • Linux架构篇、第1章_01架构的介绍HTTP HTTPS 协议全面解析
  • 【Axure教程】增删改饼图
  • PostgreSQL 中 VACUUM FULL 对索引的影响
  • 【TUST“码蹄杯”编程之星】4.30 每日一题
  • 抓取工具Charles配置教程(mac电脑+ios手机)
  • 算法四 习题 1.3
  • Vue 项目中运行 `npm run dev` 时发生的过程
  • 代码随想录算法训练营Day39
  • 数据科学与计算
  • Ecology中拦截jquery.ajax请求接口后的数据
  • 【Linux更新openSSH服务】
  • GNU gettext 快速上手
  • 论文公式根据章节自动编号教程
  • DeepSeek-Prover-V2-671B 简介、下载、体验、微调、数据集:专为数学定理自动证明设计的超大垂直领域语言模型(在线体验地址)
  • 涨薪技术|0到1学会性能测试第42课-apache监控与调优
  • 应对过度处方挑战:为药物推荐任务微调大语言模型(Xiangnan He)
  • K8S - HPA + 探针实战 - 实现弹性扩缩与自愈
  • 详解 MyBatis-Plus 框架中 QueryWrapper 类
  • Compose笔记(二十一)--AnimationVisibility
  • 学习笔记——《Java面向对象程序设计》-常用实用类
  • Python爬虫(11)Python数据存储实战:深入解析NoSQL数据库的核心应用与实战
  • OpenCV实战教程:从零开始的计算机视觉之旅
  • 鸿蒙NEXT开发动画(方块动画旋转)
  • ESP32开发-作为TCP服务端接收数据
  • 配置和使用基本存储
  • 大型连锁酒店集团数据湖应用示例