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

LeetCode热题100——42. 接雨水

https://leetcode.cn/problems/trapping-rain-water/description/?envType=study-plan-v2&envId=top-100-liked

终于要讲这道毒瘤面试题了,据说字节跳动保洁阿姨都能写出来 0.0

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

输入:height = [0,1,0,2,1,0,1,3,2,1,2,1]
输出:6
解释:上面是由数组 [0,1,0,2,1,0,1,3,2,1,2,1] 表示的高度图,在这种情况下,可以接 6 个单位的雨水(蓝色部分表示雨水)。
在这里插入图片描述

分析

初步看有点像 LeetCode热题100——11. 盛最多水的容器,也是盛水问题,但这里复杂的是盛水的面积是不规则的,不能像11这道题一样直接长乘宽得到,那怎么办呢?

  1. 分治思路
    遍历每个柱子,记录每个柱子能蓄多少水,最终把所有柱子的蓄水量求和就是答案
  2. 如何确定每个柱子的蓄水量? 柱子左右必须有比本身高的柱子才能蓄水
  3. 柱子为 nums[0] 或者 nums[length-1]时,water =0 , 边界处无法蓄水 (水满自溢)
  4. 柱子i∈ [1,length-2],左边最高柱子leftMax, 右边最高柱子 rightMax时
    1. nums[i] < min(leftMax,rightMax) 可以蓄水,water = max(0, min(leftMax,rightMax) - nums[i])
    2. nums[i] >= min(leftMax,rightMax) water = 0 (缺乏边界,无法蓄水)

代码

public int trap(int[] nums) {int leftMax = nums[0];int rightMax = nums[nums.length - 1];int left = 1, right = nums.length - 2;int res = 0;while (left <= right) {if (leftMax <= rightMax) {if (nums[left] > leftMax) {leftMax = nums[left];} else {res += leftMax - nums[left];}left++;} else {if (nums[right] > rightMax) {rightMax = nums[right];} else {res += rightMax - nums[right];}right--;}}return res;}
http://www.dtcms.com/a/313889.html

相关文章:

  • AI绘画-Stable Diffusion-WebUI的ControlNet用法
  • 设计模式(一)——抽象工厂模式
  • 蓝河操作系统(BlueOS)内核 (VIVO开源)
  • [spring-cloud: 负载均衡]-源码分析
  • Nginx服务做负载均衡网关
  • Rust ⽣成 .wasm 的极致瘦⾝之道
  • 旧物回收小程序:开启绿色生活新篇章
  • SpringBoot3.x入门到精通系列:3.2 整合 RabbitMQ 详解
  • Ethereum:智能合约开发者的“瑞士军刀”OpenZeppelin
  • 白杨SEO:百度搜索开放平台发布AI计划是什么?MCP网站红利来了?顺带说说其它
  • 剧本杀小程序系统开发:开启沉浸式推理社交新纪元
  • 力扣 hot100 Day65
  • 《Python 实用项目与工具制作指南》 · 前言
  • [自动化Adapt] GUI交互(窗口/元素) | 系统配置 | 非侵入式定制化
  • [特殊字符]️ 整个键盘控制无人机系统框架
  • Qt按键响应
  • 更智能的 RibbonBar Spread.NET 18.2Crack
  • QT:交叉编译mysql驱动库
  • 基于鼠标位置的相机缩放和平移命令的实现(原理+源码)
  • Prompt Engineering
  • 赛博威携手Dify,助力AI在企业的场景化落地
  • 【数据库】使用Sql Server创建索引优化查询速度,一般2万多数据后,通过非索引时间字段排序查询出现超时情况
  • Linux(centos)安全狗
  • Linux 用户与组管理全解析
  • 采购管理工具的实施方法论:三阶段框架与常见问题解决方案
  • RHCA02
  • How To Say - AI多语言表达工具
  • 【前端:Html】--1.3.基础语法
  • el-table高度自适应vue页面指令
  • 第二十三天(APP应用产权渠道服务资产通讯抓包静态提取动态调试测试范围)