题解 | #容器盛水问题#
容器盛水问题
http://www.nowcoder.com/practice/31c1aed01b394f0b8b7734de0324e00f
public static long maxWater(int[] arr) {
if (arr.length == 0) {
return 0;
}
int l = 0;
int r = arr.length - 1;
long res = 0;
while (r > l) {
int tmp = Math.min(arr[r], arr[l]); // 找到最小的边界 盛水由最小边界决定
// 找完一个凹槽
while (r > l && arr[l] <= tmp) { // 边界向中间缩 逐步寻找凹槽
res += tmp - arr[l];
l++;
}
// 开始找下一个凹槽
while (r > l && arr[r] <= tmp) { // 边界向中间缩 逐步寻找凹槽
res += tmp - arr[r];
r--;
}
}
return res;
}
查看6道真题和解析