news 2026/9/18 18:39:20

下雨了,算法帮你算能接多少水 ☔

作者头像

张小明

前端开发工程师

1.2k 24
文章封面图
下雨了,算法帮你算能接多少水 ☔

求解思路

这道题的关键在于理解每个位置能接多少水。

想象你站在某个位置i上,这个位置能接住的水量取决于什么呢?

其实就是左右两边的"围墙"能托住多高的水。

具体来说就是左右两边最高的柱子,其中,这两个高度中较矮的那个决定了水位线,然后用这个水位线减去当前位置的高度,就是这个位置能接的水量。

如果当前位置本身就比水位线高,那自然接不住水。

所以问题就转化成了:

对于每个位置,我们需要知道它左边的最大值和右边的最大值,然后取两者的较小值作为水位,最后累加每个位置能接的水量即可。

方法1

既然需要知道每个位置左右两边的最大值,最直接的想法就是提前算好

publicstaticinttrap(int[]nums){intn=nums.length;int[]lmax=newint[n];int[]rmax=newint[n];// 计算每个位置左边的最大值lmax[0]=nums[0];for(inti=1;i<n;i++){lmax[i]=Math.max(lmax[i-1],nums[i]);}// 计算每个位置右边的最大值rmax[n-1]=nums[n-1];for(inti=n-2;i>=0;i--){rmax[i]=Math.max(rmax[i+1],nums[i]);}// 累加每个位置能接的水量intans=0;for(inti=1;i<n-1;i++){ans+=Math.max(0,Math.min(lmax[i-1],rmax[i+1])-nums[i]);}returnans;}

方法2

假设左边最大值小于等于右边最大值,那么左指针位置的接水量只取决于左边最大值,右边再高也没用。反之亦然。

publicstaticinttrap(int[]nums){intl=1,r=nums.length-2;intlmax=nums[0],rmax=nums[nums.length-1];intans=0;while(l<=r){if(lmax<=rmax){// 左边矮,左指针位置的水量确定ans+=Math.max(0,lmax-nums[l]);lmax=Math.max(lmax,nums[l++]);}else{// 右边矮,右指针位置的水量确定ans+=Math.max(0,rmax-nums[r]);rmax=Math.max(rmax,nums[r--]);}}returnans;}

如果觉得有帮助,欢迎点赞、关注、转发~

版权声明: 本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若内容造成侵权/违法违规/事实不符,请联系邮箱:809451989@qq.com进行投诉反馈,一经查实,立即删除!
网站建设 2026/9/19 1:24:52

一口气解释清楚转换流存在的原因

本文从为什么发明转换流&#xff0c;什么时候用转换流这个角度来解释 博主在学习io流的时候就对这两个点疑惑&#xff0c;如果你也这样可以跟随我的视角来理解转换流的作用 &#xff08;字面意思&#xff1a;字节流和字符流的转换&#xff09; 解码过程&#xff1a;字节流→指定…

作者头像 李华
网站建设 2026/9/18 16:35:54

从卧床不起到健步如飞 退休老阿姨用机器人治腰突的亲身体验!

我年轻的时候在纺织厂踩了三十年缝纫机&#xff0c;退休后本以为能享清福&#xff0c;哪料儿子一句“妈&#xff0c;孩子没人带”&#xff0c;又让我化身“全职孙保姆”。小孙子刚会爬那会儿&#xff0c;我每天弯腰抱娃上百次&#xff0c;蹲上蹲下的捡玩具&#xff0c;半夜还得…

作者头像 李华
网站建设 2026/9/18 9:57:25

Java毕设项目:基于springboot新能源汽车销售管理系统基于Java Web的新能源汽车信息咨询服务(源码+文档,讲解、调试运行,定制等)

博主介绍&#xff1a;✌️码农一枚 &#xff0c;专注于大学生项目实战开发、讲解和毕业&#x1f6a2;文撰写修改等。全栈领域优质创作者&#xff0c;博客之星、掘金/华为云/阿里云/InfoQ等平台优质作者、专注于Java、小程序技术领域和毕业项目实战 ✌️技术范围&#xff1a;&am…

作者头像 李华
网站建设 2026/9/19 1:15:12

uos server 1070e在线软件仓库源整理记录

最近一直测试在uos server os版本上部署各种软件&#xff0c;同时也有小伙伴私信我uos的一些软件在线源仓库地址&#xff0c;我就简单整理出来了&#xff0c;同时也为了我后续方便使用首先正常系统安装完成后&#xff0c;在/etc/yum.repos.d 会默认有下面这个仓库源repoUnionTe…

作者头像 李华
网站建设 2026/9/18 22:26:15

谷歌镜像站同步更新:Qwen-Image全球加速访问

Qwen-Image 全球加速落地&#xff1a;当顶级文生图模型遇上谷歌镜像网络 在数字内容创作的浪潮中&#xff0c;一个设计师可能正坐在新加坡的咖啡馆里&#xff0c;用中文写下“赛博朋克风格的城市夜景&#xff0c;霓虹灯闪烁&#xff0c;雨夜街道倒映着全息广告”——不到十秒&a…

作者头像 李华