attleetcode 41. 接雨水
代码
public static
//leetcode submit region begin(Prohibit modification and deletion)
class Solution {
public int trap(int[] height) {
if (height.length < 3) {
return 0;
}
int len = height.length;
int left = 0, right = len - 1; // 左右双指针
int leftMax = 0, rightMax = 0; // 左右两边最高的柱子
// 水的体积 = sumTotal - sumHeight
int sumTotal = 0; // 柱子+水的体积
int sumHeight = 0; // 柱子体积
while (left <= right) {
int leftHeight = height[left]; // 左边柱子高度
int rightHeight = height[right]; // 右边柱子高度
// 处理较矮的柱子
if (leftHeight <= rightHeight) {
// 左边柱子矮
leftMax = Math.max(leftMax, leftHeight); // 左边已遍历过的最高的柱子
sumTotal += leftMax; // 增加总的体积
sumHeight += leftHeight; // 增加柱子的体积
left++;
} else {
// 右边柱子矮
rightMax = Math.max(rightMax, rightHeight); // 右边已遍历过的最高的柱子
sumTotal += rightMax; // 增加总的体积
sumHeight += rightHeight; // 增加柱子的体积
right--;
}
}
return sumTotal - sumHeight; // 总体积 - 柱子体积
}
}
//leetcode submit region end(Prohibit modification and deletion)


![leetcode 41. 接雨水 [java][双指针] leetcode 41. 接雨水 [java][双指针]](http://www.mshxw.com/aiimages/31/658387.png)
