【动态规划】LeetCode-42. 接雨水

42. 接雨水。

给定 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 * 10^4
0 <= height[i] <= 10^5
算法分析

解题思路

dp

复制代码
class Solution {
    public int trap(int[] height) {
	    int sum = 0;
	    int[] max_left = new int[height.length];
	    int[] max_right = new int[height.length];
	    
	    for (int i = 1; i < height.length - 1; i++) {
	        max_left[i] = Math.max(max_left[i - 1], height[i - 1]);
	    }
	    for (int i = height.length - 2; i >= 0; i--) {
	        max_right[i] = Math.max(max_right[i + 1], height[i + 1]);
	    }
	    for (int i = 1; i < height.length - 1; i++) {
	        int min = Math.min(max_left[i], max_right[i]);
	        if (min > height[i]) {
	            sum = sum + (min - height[i]);
	        }
	    }
	    return sum;
	}
}

复杂性分析

时间复杂度:O(n)

空间复杂度:O(n)

相关推荐
a伊雪4 分钟前
c++ 引用参数
c++·算法
圣保罗的大教堂34 分钟前
leetcode 3531. 统计被覆盖的建筑 中等
leetcode
Data_agent1 小时前
1688获得1688店铺列表API,python请求示例
开发语言·python·算法
2301_764441331 小时前
使用python构建的应急物资代储博弈模型
开发语言·python·算法
hetao17338372 小时前
2025-12-11 hetao1733837的刷题笔记
c++·笔记·算法
Xの哲學2 小时前
Linux电源管理深度剖析
linux·服务器·算法·架构·边缘计算
小飞Coding2 小时前
一文讲透 TF-IDF:如何用一个向量“代表”一篇文章?
算法
算家计算2 小时前
突然发布!GPT-5.2深夜来袭,3个版本碾压人类专家,打工人该怎么选?
算法·openai·ai编程
s09071363 小时前
Xilinx FPGA 中ADC 数据下变频+ CIC 滤波
算法·fpga开发·fpga·zynq
TL滕4 小时前
从0开始学算法——第十二天(KMP算法练习)
笔记·学习·算法