42. 接雨水 Trapping Rain Water
Given n
non-negative integers representing an elevation map where the width of each bar is 1
, compute how much water it can trap after raining.
Input: height = [0,1,0,2,1,0,1,3,2,1,2,1]
Output: 6
Explanation: The above elevation map (black section) is represented by array [0,1,0,2,1,0,1,3,2,1,2,1]. In this case, 6 units of rain water (blue section) are being trapped.
方法一:
暴力法,依次计算并分别查找左边最高和右边最高
方法二:
先计算出左边最高和右边最高,分别放入数组,再依次计算
public int trap(int[] height) { if (height == null || height.length == 0) return 0; int max = 0; int size = height.length; int[] left_max = new int[size]; int[] right_max = new int[size]; left_max[0] = height[0]; for (int i = 1; i < size; i++) { left_max[i] = Math.max(height[i], left_max[i - 1]); } right_max[size - 1] = height[size - 1]; for (int i = size - 2; i >= 0; i--) { right_max[i] = Math.max(height[i], right_max[i + 1]); } for (int i = 0; i < size - 1; i++) { max += Math.min(left_max[i], right_max[i]) - height[i]; } return max; }
参考链接:
https://leetcode.com/problems/trapping-rain-water/
https://leetcode-cn.com/problems/trapping-rain-water/