尧图网站建设 尧图网络
  • 首页
  • 关于我们
  • 服务项目
  • 案例展示
  • 建站流程
  • 资讯中心
  • 联系我们
首页/资讯中心/详情

JAVA练习270-接雨水

JAVA练习270-接雨水
📅 发布时间:2026/6/23 12:48:18

题目概览

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

示例 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 个单位的雨水(蓝色部分表示雨水)。

示例 2:

输入:height = [4,2,0,3,2,5]输出:9

提示:

  • n == height.length
  • 1 <= n <= 2 * 104
  • 0 <= height[i] <= 105

来源:42. 接雨水 - 力扣(LeetCode)

解题分析

方法一:动态规划

按照每个格子的角度看,每个格子能达到的蓄水池深度取决于左右两边最高的格子,令左边最高为 leftMax[ i ],右边最高为 rightMax[ i ],当个格子蓄水深度为 dp[i],可得:
dp[ i ] = min{ leftMax[ i ], rightMax[ i ] } - height[ i ]
先遍历获取左右两边最大高度,然后计算每个格子蓄水深度即可。

时间复杂度:O(n)
空间复杂度:O(n)

class Solution { public int trap(int[] height) { int result = 0, len = height.length; int[] leftMax = new int[len+1], rightMax = new int[len+1]; leftMax[0] = height[0]; rightMax[len-1] = height[len-1]; for (int i = 1; i < len; ++i) { leftMax[i] = Math.max(height[i], leftMax[i-1]); rightMax[len - 1 - i] = Math.max(height[len - 1 - i], rightMax[len - i]); } for (int i = 1; i < len; ++i) { result += Math.min(leftMax[i], rightMax[i]) - height[i]; } return result; } }

方法二:动态规划 + 双指针

由方法一得知,左边最高是从左往右遍历,右边最高是从右往左遍历,因此我们可以尝试使用双指针节省空间,令 i 在格子最左侧,j 在格子最右侧,如果 height[i] < height[j],则 leftMax 一定也 < rightMax,因此可以得出:
当 height[i] <= height[j] 时,dp[i] = leftMax - height[i];
当 height[i] > height[j] 时,dp[i] = rightMax - height[i]。

时间复杂度:O(n)
空间复杂度:O(1)

class Solution { public int trap(int[] height) { int result = 0, i = 0, j = height.length - 1, leftMax = 0, rightMax = 0; while(i < j) { leftMax = Math.max(height[i], leftMax); rightMax = Math.max(height[j], rightMax); if (height[i] < height[j]) { result += leftMax - height[i]; i++; }else { result += rightMax - height[j]; j--; } } return result; } }

相关新闻

  • 超越参数迷思:AI时代的“数字镜像”与人类思想建设
  • 如何用SiYuan开源知识管理软件重构你的思考方式:完整使用指南
  • 柔性负荷调控:可中断负荷与需求响应技术

最新新闻

  • 软件桥接管理中的抽象实现分离
  • 收藏!小白程序员必看:如何筛选真正值得做的AI场景,告别资源浪费
  • 射阳油烟机维修快速解决
  • 性价比之巅:芯片/IC烧录座源头厂家技术揭秘
  • EPE珍珠棉内衬是如何定制出来的?从产品测量到批量生产的完整流程
  • SPT-AKI存档编辑器:塔科夫离线版玩家的终极管理工具

日新闻

  • Arduino-ESP32项目深度解析:解锁隐藏芯片支持与架构演进
  • 2026年 系统窗厂家/品牌推荐榜单:隔音系统窗+高端系统门窗的核心优势与选购指南 - 品牌发掘
  • NVBench:首个双语非言语发声语音合成评测基准详解与实践

周新闻

  • Visual C++运行库修复终极指南:5分钟快速解决Windows软件启动错误
  • 手把手教你构建统计局地区经济数据爬虫:从环境搭建到数据持久化全指南
  • 2026多Agent深度解析:用AI团队替代单一模型,四种架构实战落地

月新闻

  • 【总结】入门篇:50句话让你记住架构核心概念
  • WeChatMsg技术方案解析:实现Mac微信数据自主管理的完整解决方案
  • WeChatMsg:革新性微信数据备份方案,打造你的专属数字记忆库

关于尧图

  • 公司简介
  • 团队介绍
  • 企业文化
  • 荣誉资质

服务项目

  • 定制开发
  • 电商建站
  • UI 设计
  • 运维服务

快速链接

  • 案例展示
  • 建站流程
  • 常见问题
  • 资讯中心

联系方式

  • 📍北京市朝阳区互联网产业园 A 座 10 层
  • 📞400-888-8888
  • ✉️contact@rkmt.cn
  • 🕐周一至周日 9:00-21:00

© 2024 北京尧图网络科技有限公司 版权所有 | 京 ICP 备 XXXXXXXX 号