class Solution {
public int trap(int[] height) {
if(height == null || height.length == 0) {
return 0;
}
int[] leftMax = new int[height.length];
int[] rightMax = new int[height.length];
int ans = 0;
int size = height.length;
leftMax[0] = height[0];
//动态规划记录当前位置左边最大的数
for(int i = 1; i <= size - 2; i++) {
leftMax[i] = Math.max(height[i], leftMax[i - 1]);
}
rightMax[size - 1] = height[size - 1];
//动态规划记录当前位置右边最大的数
for(int j = size - 2; j >= 1; j--) {
rightMax[j] = Math.max(height[j], rightMax[j + 1]);
}
//左边最大的和右边最大的取两者较小的减去自己
for(int i = 1; i <= size - 2; i++) {
ans += Math.min(leftMax[i], rightMax[i]) - height[i];
}
return ans;
}
}
算法-数组-接雨水
最新推荐文章于 2021-04-25 21:22:32 发布