暴力破解Leetcode 42:接雨水问题

本文详细解析LeetCode 42题——接雨水问题,通过定性与定量分析,探讨如何计算数组表示的柱子高度图中能接收到的雨水量。文章提供了Java代码实现,并进行了优化,解释了如何判断并计算柱子间的雨水存储。
摘要由CSDN通过智能技术生成

题目描述

问题描述 给定一个整形数组arr,已知其中所有的值都是非负的,将这个数组看作一个柱子高度图,计算按此排列的柱子,下雨之后能接多少雨水。(数组以外的区域高度视为0)
数据范围:1≤n≤1000000,数组中每个值满足 >=0 
示例 
输入:[3,1,2,5,2,4]

返回值:5

说明:数组 [3,1,2,5,2,4] 表示柱子高度,在这种情况下,可以接 5个单位的雨水,蓝色的为雨水

 

 分析

定性分析

正如一个巴掌拍不响,一根、两根柱子存不住水,想要存住水,至少需要三根柱子,且形状要满足“凹”型,意味着某个柱子想要存水,它的左边右边必须至少要有一根高于自身高度的柱子

具体到每根柱子,分析如下:

  • 0号柱子,因为它左边没有比它高的柱子,所以它不能存水
  • 1号柱子,它左边的柱子只有一根,是0号,比它高,它的右边有四根柱子均比他高,所以它能存水
  • 2号柱子,它左边有两根柱子,但只有0号柱子比它高,右边有三根柱子,其中有两个比它高,满足两边均至少有一根高于自身这个条件,所以它也能存水
  • 3号柱子,一柱擎天,左右两边都没有比它高的柱子,所以它不能存水
  • 以此类推,4号柱子,左右各有一根柱子比它高,能存水
  • 5号柱子,满足左边有1根柱子比它高,但它的右边是空的,不满足两边均至少有一根高于自身这个条件,所以它不能存水

定量分析

上面定性的分析了能不能存水的条件,接下来定量的分析一下能存多少水的问题

能不能存水取决于能否构成“凹”型,能存多少水取决于“凹”型两边的高度,且根据木桶效应:一个木桶能装多少水,取决于最短的那块板。“凹”型能存多少水,也取决于两边最低的那根柱子。

  • 0号柱
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值