容器盛水问题
题目描述
给定一个整形数组arr,已知其中所有的值都是非负的,将这个数组看作一个容器,请返回容器能装多少水。
具体请参考样例解释
示例1
代码
```java
import java.util.*;
public class Solution {
/**
* max water
* @param arr int整型一维数组 the array
* @return long长整型
*/
public long maxWater (int[] arr) {
// write code here
int l = 0;
int r = arr.length-1;
int l_max = 0;
int r_max = 0;
long ans = 0;
//木桶理论,装多少由最短的边界决定,最短边先移动,先计算,若先移动长的边界,减去的容积不正确
while(l <= r){
l_max = Math.max(l_max, arr[l]);
r_max = Math.max(r_max,arr[r]);
if(l_max < r_max){
ans += l_max - arr[l];
l++;
}else{
ans += r_max - arr[r];
r--;
}
}
return ans;
}
}