public int water(int[] height) {
int n = height.length, sum = 0;
int[] right = new int[n];
int rightMax = height[n - 1];
for (int i = n - 1; i >= 0; i--) {
right[i] = rightMax;
rightMax = Math.max(rightMax, height[i]);
}
int leftMax = height[0];
for (int i = 0; i < n; i++) {
int min = Math.min(leftMax, right[i]);
sum += min > height[i] ? min - height[i] : 0;
leftMax = Math.max(leftMax, height[i]);
}
return sum;
}