標籤:style blog http io color os ar for sp
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!
找到最長的那塊木板,假設其下標為maxIdx。
分別從左側和右側向其逼近。
在左側逼近過程中:
如果一個木板的長度小於已經遍曆的最大長度max,即max>該木板<maxIdx,所以在該木板位置能存max - 該木板長度的水量(左右兩側各有一個木板長於它)。
如果一個木板的長度大於已經遍曆的最大長度max,即max<該木板<maxIdx,所以在該木板位置不能存水(因為左右兩側只有一個木板(maxIdx)長於它)。更新max值。
右側逼近過程與左側相似。
1 public class Solution { 2 public int trap(int[] A) { 3 if (A.length<3) { 4 return 0; 5 } 6 int len=A.length; 7 int maxIndex=0; 8 //找出最大值的下標 9 for (int i = 0; i < len; i++) {10 if (A[i]>A[maxIndex]) {11 maxIndex=i;12 }13 }14 15 int leftMax=0;16 int rightMax=0;17 int water=0;18 for (int i = 0; i < maxIndex; i++) {19 if (leftMax>A[i]) {20 water=water+leftMax-A[i];21 }else {22 leftMax=A[i];23 }24 }25 26 for (int i = len-1; i > maxIndex; i--) {27 if (rightMax>A[i]) {28 water=water+rightMax-A[i];29 }else {30 rightMax=A[i];31 }32 }33 return water;34 }35 }
LeetCode Trapping Rain Water