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;
}