標籤:each with length 2.0 高度 arc trap unit amp
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!
此題和之前的container with most water有些類似,most water裡面求的是裝最多的水,且裡面沒有bar,而這道題裡面水在哪個bar已經告訴我們了,並且中間由很多的bar,也是用two pointer來做,判定條件也幾乎一樣,看左右兩邊哪個bar小哪個進行移動,這裡面需要設定兩個maxleft,maxright變數,分別表示指標走過的額地區裡面bar最大的高度,如果指標所到之處沒有max大,則max-pointer為該指標所處位置的水深,否則(大於等於)max為指標所處bar的高度,代碼如下:
public class Solution {
public int trap(int[] height) {
int left = 0;
int right = height.length-1;
int maxleft = 0;
int maxright = 0;
int sum = 0;
while(left<right){
if(height[left]<=height[right]){
if(height[left]>=maxleft){
maxleft = height[left];
}else{
sum+=maxleft-height[left];
}
left++;
}else{
if(height[right]>=maxright){
maxright = height[right];
}else{
sum+=maxright-height[right];
}
right--;
}
}
return sum;
}
}
42. Trapping Rain Water