题解 | #用两个栈实现队列#
容器盛水问题
http://www.nowcoder.com/practice/31c1aed01b394f0b8b7734de0324e00f
双指针方法解决储水问题
import java.util.*; public class Solution { public long maxWater (int[] arr) { if(arr.length == 0 || arr.length <= 2) return 0; int left = 0, right = arr.length-1; long res = 0; //取低的为边界 int min = Math.min(arr[left],arr[right]); while(left < right){ // 如果左边界小于右边界 // 则储水量边界应该从左侧算起 // 现在arr[left]作为左边的墙体 if(arr[left] < arr[right]){ // 判断墙体右边是否可以储水 left++; // 如果墙体右边的墙体高度小于边界墙体 // 说明此处可以储水 if(arr[left] < min){ res += min - arr[left]; } // 如果墙体右边的墙体高度大于边界墙体 // 说明现在边界墙体应该改变了 else{ min = Math.min(arr[left],arr[right]); } } // 如果右边界小于左边界 // 则储水量边界应该从右侧算起 // 现在arr[right]作为右边的墙体 else{ right--; if(arr[right] < min){ res += min - arr[right]; } else{ min = Math.min(arr[left],arr[right]); } } } return res; } }