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

容器盛水问题

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


全部评论

相关推荐

不愿透露姓名的神秘牛友
07-03 18:22
投了几百份简历,专业和方向完全对口,都已读不回。尝试改了一下学校,果然有奇效。
steelhead:这不是很正常嘛,BOSS好的是即便是你学院本可能都会和聊几句,牛客上学院本机会很少了
点赞 评论 收藏
分享
Java抽象带篮子:简历怎么写可以看看我发的帖子,你的第一个是实习经历吗?那怎么写的是你的第一个练手项目呢?简历写的怎么样直接投小厂面试一下就知道了
没有实习经历,还有机会进...
点赞 评论 收藏
分享
缒梦&独舞:这家公司是这样的,去年给我实习offer了,不过也是面着玩儿的,他周六还要去做公益志愿活动
点赞 评论 收藏
分享
评论
点赞
收藏
分享

创作者周榜

更多
牛客网
牛客网在线编程
牛客网题解
牛客企业服务