Given n non-negative integers representing an elevation map where the width of each bar is 1, compute how much water it is able to trap after raining.
For example,
Given [0,1,0,2,1,0,1,3,2,1,2,1], return 6.

The above elevation map 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. Thanks Marcos for contributing this image!
public class Solution {
public int trap(int[] A) {
Stack<Integer> pre = new Stack<Integer>();
int result = 0;
for(int i = 0; i < A.length; i++) {
if(pre.isEmpty() || A[pre.peek()] > A[i]) {
pre.push(i);
continue;
}
int mid = pre.pop();
if(pre.isEmpty()) pre.push(i);
else {
int left = pre.peek();
result += (Math.min(A[left], A[i])-A[mid]) * (i-left-1);
i--;
}
}
return result;
}
}
本文详细介绍了如何通过不同的算法解决雨水收集问题,包括使用动态规划、两遍扫描和栈等方法来计算给定地形能捕捉多少雨水。
400

被折叠的 条评论
为什么被折叠?



