题解 | #用两个栈实现队列#

容器盛水问题

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;
    }
}


全部评论

相关推荐

不愿透露姓名的神秘牛友
11-24 20:55
阿里国际 Java工程师 2.7k*16.0
程序员猪皮:没有超过3k的,不太好选。春招再看看
点赞 评论 收藏
分享
听说改名字就能收到offer哈:Radis写错了兄弟
点赞 评论 收藏
分享
点赞 收藏 评论
分享
牛客网
牛客企业服务