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

力扣42:接雨水

力扣42:接雨水

  • 题目
  • 思路
  • 代码

题目

给定 n 个非负整数表示每个宽度为 1 的柱子的高度图,计算按此排列的柱子,下雨之后能接多少雨水。
在这里插入图片描述

思路

想要解决这道题我们首先要知道一个位置接水量取决于哪些因素,我们可以联想一下现实生活中假如我们使用一个木桶来装水,装水量区决于两个因素,木桶四周最短的那个木板以及木桶底部的高度。因为现实生活中是三维的所以无法定性是哪个方向的木板只能说是四周的木板,但是题目是二维的我们只需要考虑左右两侧就可以了。所以数组中每一个位置的装水量就区决于左右两侧最高的柱子以及当前位置的柱子高度。
那么我们想要解决这道题我们只需要维护两个数组即左侧最高柱子以及右侧最高柱子,注意这个左右两侧是包含当前柱子的高度的,如果左右两侧都没当前柱子高就别提装水这事了。

代码

class Solution {
public:int trap(vector<int>& height) {//每一个位置能存储多少雨水取决于三个条件//1.位置左侧最高的柱子//2.位置右侧最高的柱子//3.位置当前的柱子高度int n = height.size();vector<int> leftheight(n);vector<int> rightheight(n);leftheight[0] = height[0];rightheight[n-1] = height[n-1];for(int i = 1;i < n;i++){//这里的左侧柱子高度是包含当前柱子的高度的。//即[0,i]的范围里最高的柱子,都是闭区间leftheight[i] = max(leftheight[i-1],height[i]);}for(int i = n-2;i >= 0;i--){//[i,n-1]的范围最高的柱子rightheight[i] = max(rightheight[i+1],height[i]);}int res = 0;for(int i = 0;i < n;i++){//也就保证了左侧和右侧最高柱子的最小值起码是等于当前位置不至于接水量为负数res += min(leftheight[i],rightheight[i]) - height[i];}return res;}
};
http://www.lryc.cn/news/620322.html

相关文章:

  • 人工智能入门①:AI基础知识(上)
  • Python图像处理基础(十三)
  • 《工程封装》(Python)
  • 网络安全合规6--服务器安全检测和防御技术
  • 3.Ansible编写和运行playbook
  • 3DM游戏运行库合集离线安装包下载, msvcp140.dll丢失等问题修复
  • ESP32_STM32_DHT20
  • 三极管的基极为什么需要下拉电阻
  • Vue3从入门到精通:4.1 Vue Router 4深度解析与实战应用
  • vue实现模拟 ai 对话功能
  • JS的学习5
  • vue修改element的css属性
  • 决策树回归:用“分而治之”的智慧,搞定非线性回归难题(附3D可视化)
  • 北京JAVA基础面试30天打卡09
  • uniapp授权登录
  • 硬件工程师八月实战项目分享
  • 8.13迎来联动:PUBG布加迪,新版本37.1内容资讯!低配置也能飙车吃鸡!
  • 谈一些iOS组件化相关的东西
  • 【Golang】 Context.WithCancel 全面解析与实战指南
  • CAN仲裁机制的原理
  • 【CV 目标检测】③——目标检测方法
  • 玳瑁的嵌入式日记D17-08013(linux文件编程)
  • 深度学习(5):激活函数
  • Linux 桌面到工作站的“性能炼金术”——开发者效率的 6 个隐形瓶颈与破解方案
  • Celery+RabbitMQ+Redis
  • AR展厅在文化展示与传承领域的应用​
  • 嵌入式学习(day26)frambuffer帧缓冲
  • 嵌入式|VNC实现开发板远程Debian桌面
  • PG靶机 - Pelican
  • 飞凌OK3568开发板QT应用程序编译流程