news 2026/5/1 16:17:05

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

作者头像

张小明

前端开发工程师

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/4/17 7:27:12

Mem Reduct内存管理终极指南:告别卡顿,拥抱流畅体验

Mem Reduct内存管理终极指南&#xff1a;告别卡顿&#xff0c;拥抱流畅体验 【免费下载链接】memreduct Lightweight real-time memory management application to monitor and clean system memory on your computer. 项目地址: https://gitcode.com/gh_mirrors/me/memreduc…

作者头像 李华
网站建设 2026/4/27 9:05:15

基于高质量数据训练的专业化代码生成模型——Seed-Coder-8B-Base

基于高质量数据训练的专业化代码生成模型——Seed-Coder-8B-Base 在今天的软件开发环境中&#xff0c;开发者每天都在与重复性编码、语法陷阱和团队协作中的风格冲突打交道。尽管通用大语言模型已经能够“写代码”&#xff0c;但它们更像是泛读百书的通才——懂得多&#xff0c…

作者头像 李华
网站建设 2026/4/17 7:26:34

YooAsset实战:大型手游资源管理案例解析

快速体验 打开 InsCode(快马)平台 https://www.inscode.net输入框内输入如下内容&#xff1a; 创建一个手游资源管理案例演示项目&#xff0c;使用YooAsset实现以下功能&#xff1a;1) 动态加载场景资源 2) AB包依赖管理 3) 热更新流程实现。要求包含完整的项目结构&#xff0…

作者头像 李华
网站建设 2026/4/19 4:50:26

如何用ColorUI选项卡组件解决移动端界面切换难题

如何用ColorUI选项卡组件解决移动端界面切换难题 【免费下载链接】coloruicss 鲜亮的高饱和色彩&#xff0c;专注视觉的小程序组件库 项目地址: https://gitcode.com/gh_mirrors/co/coloruicss 你是否曾经在开发移动端应用时&#xff0c;面对复杂的界面分类需求感到无从…

作者头像 李华
网站建设 2026/4/20 4:06:27

终极指南:Vite-Vue3-Lowcode可视化开发平台如何让前端开发效率飙升500%

终极指南&#xff1a;Vite-Vue3-Lowcode可视化开发平台如何让前端开发效率飙升500% 【免费下载链接】vite-vue3-lowcode vue3.x vite2.x vant element-plus H5移动端低代码平台 lowcode 可视化拖拽 可视化编辑器 visual editor 类似易企秀的H5制作、建站工具、可视化搭建工具…

作者头像 李华