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.
Given[0,1,0,2,1,0,1,3,2,1,2,1]
, return6
.
解题思路:两个指针,从最小的一边开始移动,一开始记录leftHight 和 rightHight。如果前/后一个比leftHight/rightHight低,加上高度差,否则更新leftHight/rightHight。
class Solution {
public:
/*
* @param heights: a list of integers
* @return: a integer
*/
int trapRainWater(vector<int> heights) {
// write your code here
int size = heights.size();
if (size == 0) {
return 0;
}
int left = 0;
int right = size - 1;
int leftHight = heights[left];
int rightHight = heights[right];
int total = 0;
while (left < right) {
if (leftHight < rightHight) {
left++;
if (leftHight > heights[left]) {
total = total + (leftHight - heights[left]);
} else {
leftHight = heights[left];
}
} else {
right--;
if (rightHight > heights[right]) {
total = total + (rightHight - heights[right]);
} else {
rightHight = heights[right];
}
}
}
return total;
}
};