//采用双指针,先分别找到左边和右边的峰点,
如果左边的值较小,则左指针右移,该处的值与左边峰点的值的差值即为该处接到的雨水值
如果右边的值较小,则右指针左移,该处的值与右边峰点的值的差值即为该处接到的雨水值
知道找到一个值大于峰点,则该出成为新的峰点,循环查找,知道左右指针相遇;

import java.util.*;


public class Solution {
/**
 * max water
 * @param arr int整型一维数组 the array
 * @return long长整型
 */
public long maxWater (int[] arr) {
    // write code here
    if (arr.length < 2) {
        return 0;
    }
    Long res = 0L;
    int left = 0;
    int right = arr.length - 1;
    while (left < right - 1) {
        while (left < right - 1 && arr[left] < arr[left + 1]) {
            left++;
        }
        while (left < right - 1 && arr[right] < arr[right - 1]) {
            right--;
        }
        int hight = Math.min(arr[left], arr[right]);
        if (arr[left] < arr[right]) {
            while (left < right) {
                left++;
                if (arr[left] > hight) {
                    break;
                }
                res += hight - arr[left];

            }
        } else {
            while (left < right) {
                right--;
                if (arr[right] > hight) {
                    break;
                }
                res += hight - arr[right];

            }
        }
    }
    return res;

}

}