动态规划 计算每一个位置左右最大值

根据这个位置左右最大值 , 可以计算这个位置接水量



public class Solution {
    /**
     * max water
     * @param arr int整型一维数组 the array
     * @return long长整型
     */
    public long maxWater (int[] arr) {
        // write code here
        int n  = arr.length;
        if (n == 0){
            return 0;
        }
        int[] leftMaxDp = new int[n];
       leftMaxDp[0] = arr[0];
        for(int i= 1;i<n;i++){
            leftMaxDp[i] = Math.max(leftMaxDp[i-1],arr[i]);
        }
        
        int[] rightMaxDp = new int[n];
        rightMaxDp[n-1] = arr[n-1];
        for(int i = n-2;i>=0;i--){
            rightMaxDp[i] = Math.max(rightMaxDp[i+1],arr[i]);
        }
        long res = 0;
//         计算每一个位置接水量
        for(int i =1;i<n-1;i++){
            int temp = Math.min(leftMaxDp[i],rightMaxDp[i]) - arr[i];
            res += temp;
        }
         return res;
    }
}