思路:双指针
接水的多少取决于短板。因此指针left与right一左一右,每次取出最小值,从left往后寻找比最小值小的挡板,二者之差为当前挡板的接水量,直到遇到比它高的。同理,right也往中间寻找,直到遇到比它高的挡板。此时一轮大循环结束,重新计算left与right之间的最小值,开始新一轮的大循环。

public long maxWater (int[] arr) {
        // write code here
        int left=0;
        int right=arr.length-1;
        long water=0;
        while(left<right){
            //计算left与right挡板的较小值。
            int min=arr[left]<arr[right]?arr[left]:arr[right];
            while(left<right && arr[left]<=min){
                water+=min-arr[left];
                left++;
            }
            while(left<right && arr[right]<=min){
                water+=min-arr[right];
                right--;
            }
        }
        return water;
    }