leetcode 热题 100_接雨水

题解一:

        按列求:分别考虑每一列的雨水高度,某列的雨水高度只与其左侧最高墙和右侧最高墙有关,一种情况是该列比左右侧的墙都低,则根据木桶效应该列雨水高度为min(左侧墙高,右侧墙高)-列高,而其余情况该列均无法接住雨水。找左右侧最高墙时可以用动态规划进行优化,对于第n列,左侧最高墙为max(第n-1列的左侧最高墙,第n-1列高度),右侧最高墙为max(第n+1列的右侧最高墙,第n+1列高度),最后将每列的雨水高度相加即可。

class Solution {public int trap(int[] height) {int len = height.length;int water = 0;int[] left = new int[len];int[] right = new int[len];left[0] = 0;right[len - 1] = 0;for (int i = 1; i < len; i++) {left[i] = Math.max(left[i - 1], height[i - 1]);}for (int i = len - 2; i >= 0; i--) {right[i] = Math.max(right[i + 1], height[i + 1]);}for (int i = 1; i < len - 1; i++) {if (height[i] < left[i] && height[i] < right[i]) water += Math.min(left[i], right[i]) - height[i];}return water;}
}

题解二:

        单调栈:由于只有凹型结构可以接住雨水,因此我们可以找出高度图中的所有凹型结构,计算接住雨水的量总和。我们利用单调栈来求解,要满足凹型结构则需要至少三根柱子,并且高度呈先递减后递增的趋势。遍历数组依次入栈,如果是递减结构则继续入栈,如果出现递增,则判断是否满足凹型结构(栈中至少有两个元素),如果不满足则说明只能形成两根递增结构的柱子,此时将左柱子出栈,如果满足则根据水桶效应计算三个柱子能接住的雨水量,并将中部柱子出栈。以下是官方给出的动画演示(来源. - 力扣(LeetCode))

import java.util.Stack;class Solution {public int trap(int[] height) {int len = height.length;Stack<Integer> stack = new Stack<>();int water = 0;for (int i = 0; i < len; i++) {while (!stack.isEmpty() && height[i] > height[stack.peek()]) {int temp = stack.pop();if (stack.isEmpty()) break;else {int left = stack.peek();water += (i - left - 1) * (Math.min(height[i], height[left]) - height[temp]);}}stack.push(i);}return water;}
}

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/717378.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

智能驾驶及相关零部件摄像头毫米波雷达激光雷达和芯片渗透率

一、总体情况 乘联会数据显示&#xff0c;1月1日至1月28日&#xff0c;全国乘用车厂商新能源车批发销量为56.7万辆&#xff0c;同比增长76%&#xff0c;环比下降38%&#xff1b;国内新能源车市场零售销量为59.6万辆&#xff0c;同比增长92%&#xff0c;环比下降24%。 二、销…

考研总计划(基础篇)

分为数学&#xff0c;专业课&#xff0c;英语三个部分 数学规划表 高数基础&#xff1a;3月初到4月15号 具体实行计划&#xff1a;分为看课日和写题日 看课日:早上10点到12点半看课&#xff0c;19:30到21:30继续看课。 写题日:早上10点到12点半复习前一天的题目&#xff0…

【word】引用文献如何标注右上角

一、在Word文档中引用文献并标注在右上角的具体步骤如下 1、将光标移动到需要添加文献标注的位置&#xff1a; 2、在文档上方的工具栏中选择“引用”选项&#xff1a; 3、点击“插入脚注”或“插入尾注”&#xff1a; ①如果选择的是脚注&#xff0c;则脚注区域会出现在本页的…

多路转接之epoll

常用的三个API&#xff1a; epoll_create(); //例如 int epfd epoll(10);创建一棵有10个结点的红黑树&#xff0c;注意&#xff1a;这个数只是对内核建议的数值&#xff0c;内核参照这个参数去构建epoll_ctrl();//参数2 op可以取值 EPOLL_CTL_ADD/MOD/DELevents:EPOLLIN/…

Professor教诲-学术笔记1

关于指导学生 自己带的学生&#xff0c;要把文章从头到尾检查好了&#xff0c;再发给professor要至少留给professor一周的时间改文章&#xff0c;太迟了不如放弃DDL要在合作中&#xff0c;充分尊重合作者认真对待向别人求推荐信这件事&#xff0c;别人找你推荐也要慎重&#x…

成为大佬之路--linux软件安装使用第000000025篇--linux docker安装mysql

安装 1.拉取镜像 docker pull centos/mysql-57-centos7 2.启动mysql docker run -di --nametensquare_mysql -p 3306:3306 -e MYSQL_ROOT_PASSWORD123456 centos/mysql-57-centos7

Pyglet图形界面版2048游戏——详尽实现教程(上)

目录 Pyglet图形界面版2048游戏 一、色块展示 二、绘制标题 三、方阵色块 四、界面布局 五、键鼠操作 Pyglet图形界面版2048游戏 一、色块展示 准备好游戏数字的背景颜色&#xff0c;如以下12种&#xff1a; COLOR ((206, 194, 180, 255), (237, 229, 218, 255), (23…

常见Vue原理面试题

1. Vue的响应式原理是什么&#xff1f;请详细说明Object.defineProperty()和Proxy的区别和用法。 响应式原理&#xff1a;Vue中采用了数据劫持的方式&#xff0c;通过Object.defineProperty()函数来监听数据变化&#xff0c;并在数据变化时触发对应的更新函数。 Object.define…

SpringCloud负载均衡源码解析 | 带你从表层一步步剖析Ribbon组件如何实现负载均衡功能

目录 1、负载均衡原理 2、源码分析 2.1、LoadBalanced 2.2、LoadBalancerClient 2.3、RibbonAutoConfiguration 2.4、LoadBalancerAutoConfiguration 2.5、LoadBalancerIntercepor⭐ 2.6、再回LoadBalancerClient 2.7、RibbonLoadBalancerClient 2.7.1、DynamicServe…

OpenCV 4基础篇| OpenCV图像的拼接

目录 1. Numpy (np.hstack&#xff0c;np.vstack)1.1 注意事项1.2 代码示例 2. matplotlib2.1 注意事项2.2 代码示例 3. 扩展示例&#xff1a;多张小图合并成一张大图4. 总结 1. Numpy (np.hstack&#xff0c;np.vstack) 语法结构&#xff1a; retval np.hstack(tup) # 水平…

工作日记:JavaScript fill() 方法

定义 fill() 方法用于将一个固定值替换数组的元素。 语法 array.fill(value, start, end) value&#xff1a;必填。要填充的值 start&#xff1a;可选。开始填充位置 end&#xff1a;可选。结束填充位置&#xff08;默认是数组的长度&#xff1a;array.length&#xff09;…

提取拼多多店铺商家电话的爬虫软件

拼多多是中国知名的团购电商平台&#xff0c;许多用户在购物时都希望能够直接联系到店铺商家&#xff0c;以便获得更多的产品信息或解决问题。在这篇文章中&#xff0c;我们将介绍如何使用Python编写一个爬虫软件&#xff0c;来提取拼多多店铺商家电话。 首先&#xff0c;我们…

c++之通讯录管理系统

1&#xff0c;系统需求 通讯录是一个记录亲人&#xff0c;好友信息的工具 系统中需要实现的功能如下&#xff1a; 1&#xff0c;添加联系人&#xff1a;向通讯录中添加新人&#xff0c;信息包括&#xff08;姓名&#xff0c;性别&#xff0c;年龄&#xff0c;联系电话&#…

构建高效的接口自动化测试框架思路

在选择接口测试自动化框架时&#xff0c;需要根据团队的技术栈和项目需求来综合考虑。对于测试团队来说&#xff0c;使用Python相关的测试框架更为便捷。无论选择哪种框架&#xff0c;重要的是确保 框架功能完备&#xff0c;易于维护和扩展&#xff0c;提高测试效率和准确性。今…

IntelliJ IDEA 的常用快捷键

IntelliJ IDEA 的常用快捷键非常多&#xff0c;这些快捷键可以帮助你更高效地编写代码。以下是一些常用的快捷键总结&#xff1a; 基础操作 CtrlN&#xff1a;查找类CtrlShiftN&#xff1a;查找文件CtrlAltL&#xff1a;格式化代码AltInsert&#xff1a;生成代码&#xff08;…

信息安全技术第1章——信息网络安全基本概念

课程介绍 网络信息安全是医学信息工程专业的限选课。主要围绕计算机网络安全所涉及的主要问题进行讲解&#xff0c;内容包括&#xff1a;对称密码与公钥密码的基本原理、相关算法及应用。电子邮件的安全&#xff0c;IP安全&#xff0c;Web安全&#xff0c;恶意软件及防火墙等内…

UI自动化-(web端窗口截图文件上传-实操入门)

1、窗口截图 1. UI自动化中&#xff0c;为什么需要进行窗口截图&#xff1f; 调试和故障排除&#xff1a;截图可以直观地查看界面的状态&#xff0c;快速识别和解决问题。当自动化过程中出现错误或异常时&#xff0c;通过查看截图可以确定是否是界面元素的问题&#xff0c;例…

C++ opencv 学习

文章目录 1、创建窗口2、读取图片3、视频采集4、Mat的使用5、异或操作6、通道分离&#xff0c;通道合并7、色彩空间转换8、最大值、最小值9、绘制图像10、多边形绘制11、随机数12、鼠标实时绘制矩形13、归一化14、resize操作15、旋转翻转16、视频操作17、模糊操作18、高斯模糊操…

SpringBoot整合MyBatis实现增删改查

✅作者简介:大家好,我是Leo,热爱Java后端开发者,一个想要与大家共同进步的男人😉😉 🍎个人主页:Leo的博客 💞当前专栏: 循序渐进学SpringBoot ✨特色专栏: MySQL学习 🥭本文内容: SpringBoot整合MyBatis实现增删改查 📚个人知识库: Leo知识库,欢迎大家访…

mysql之 case when

1 简单 case 函数&#xff0c;IF函数 格式&#xff1a; CASE input_expression WHEN when_expression THENresult_expression [...n ] [ ELSEelse_result_expression ENDIF(条件,True结果,False结果)2 条件表达式 可嵌套多层&#xff0c;类似于 if … else if … else … end…