0%

leetcode 42 Solution

代码解析

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
package com.demo.s42;

/**
* 接雨水
* 给定 n 个非负整数表示每个宽度为 1 的柱子的高度图,计算按此排列的柱子,下雨之后能接多少雨水。
*/
public class Solution {
public int trap(int[] height) {
if(height.length == 0) {
return 0;
}
//从左侧开始找最大值
int[] maxLeft = new int[height.length];
maxLeft[0] = height[0];
for(int i = 1; i < height.length; i++) {
maxLeft[i] = Math.max(maxLeft[i-1], height[i]);
}
//从右侧开始找最大值
int[] maxRight = new int[height.length];
maxRight[height.length -1] = height[height.length-1];
for(int i = height.length-2; i >= 0; i--) {
maxRight[i] = Math.max(maxRight[i + 1], height[i]);
}

int sum = 0;
//统计所有雨水小矩形的大小
for(int i = 0; i < height.length; i++) {
//左右侧最大值的最小值累加
sum += Math.min(maxLeft[i], maxRight[i]) - height[i];
}
return sum;
}
}