news 2026/6/23 12:39:39

JAVA练习270-接雨水

作者头像

张小明

前端开发工程师

1.2k 24
文章封面图
JAVA练习270-接雨水

题目概览

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

某消费金融接入人脸识别KYC,欺诈率下降47%:一份真实的降本增效复盘

当黑产用AI换脸、3D面具批量攻击时&#xff0c;传统风控几近失效。本文复盘某头部消费金融公司如何通过人脸识别KYC完成风控升级——欺诈率下降47%&#xff0c;冒用身份贷款案件减少超六成&#xff0c;验证时间从分钟级压缩至30秒内。一、背景&#xff1a;当“假人”比“真人”…

作者头像 李华
网站建设 2026/6/23 12:11:44

矿用LCFB-12护套连接器控制线缆详细介绍‌

LCFB-12护套连接器是专为煤矿井下‌电液控制系统‌设计的‌12芯本安型控制线缆组件‌&#xff0c;用于实现多路传感器、执行器与控制器之间的‌安全、稳定、高抗扰信号与电源集成传输‌&#xff0c;是智能化综采工作面多参数协同控制的关键物理层接口。一、线缆物理结构‌ 表格…

作者头像 李华
网站建设 2026/6/23 12:07:03

四款 PDF 处理工具实测分享,本地软件、在线网页按需挑选

日常办公经常和 PDF 打交道&#xff0c;转 Word、拆分合并、压缩扫描件&#xff0c;来回切换好几个工具实在麻烦。我整理了四款不同类型的 PDF 处理工具&#xff0c;有本地客户端也有线上网站&#xff0c;各自优缺点和适用场景说清楚&#xff0c;不用再到处找零散工具。鲲穹 pd…

作者头像 李华
网站建设 2026/6/23 12:03:28

C语言小游戏 — 三子棋

函数的声明&#xff1a;#include <stdio.h> #include <stdlib.h> #include <time.h>//符号的定义 #define ROW 3 #define COL 3//函数的声明//初始化棋盘 void InitBoard(char board[ROW][COL], int row, int col);//打印棋盘函数 void DisplayBoard(char bo…

作者头像 李华