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 int trap(int[] A) {
if(A==null || A.length<=2) {
return 0;
}
int water = 0;
int max = 0;
int maxLeft[] = new int[A.length];
int maxRight[] = new int[A.length];
for(int i=0;i<A.length;i++) {
maxLeft[i] = max;
max = Math.max(max, A[i]);
}
max = 0;
for(int i=A.length-1;i>=0;i--) {
maxRight[i] = max;
max = Math.max(max, A[i]);
}
for(int i=1;i<A.length-1;i++) {
int min = Math.min(maxLeft[i], maxRight[i]);
if(A[i]<min) {
water += min - A[i];
}
}
return water;
}
}
=============
public class Solution {
public int trap(int[] A) {
int n = A.length;
int left=0; int right=n-1;
int res=0;
int maxleft=0, maxright=0;
while(left<=right){
if(A[left]<=A[right]){
if(A[left]>=maxleft) maxleft=A[left];
else res+=maxleft-A[left];
left++;
}
else{
if(A[right]>=maxright) maxright= A[right];
else res+=maxright-A[right];
right--;
}
}
return res;
}
}
没有评论:
发表评论