动态规划
原理:https://leetcode-cn.com/problems/trapping-rain-water/solution/xiang-xi-tong-su-de-si-lu-fen-xi-duo-jie-fa-by-w-8/
时间复杂度:O(n)
空间复杂度:O(n)
import java.util.*;
public class Solution {
/**
* max water
* @param arr int整型一维数组 the array
* @return long长整型
*/
public long maxWater (int[] arr) {
// write code here
Long sum = 0L; //!!!注意返回值是长整型
int[] maxLeft = new int[arr.length];
int[] maxRight = new int[arr.length];
for (int i = 1; i < arr.length; i++) maxLeft[i] = Math.max(maxLeft[i - 1], arr[i - 1]);
for (int i = arr.length - 2; i >= 0; i--) maxRight[i] = Math.max(maxRight[i + 1], arr[i + 1]);
for (int i = 1; i < arr.length - 1; i++) {
int min = Math.min(maxLeft[i], maxRight[i]);
if (min > arr[i]) sum += min - arr[i];
}
return sum;
}
}
京公网安备 11010502036488号