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

容器盛水问题

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


全部评论

相关推荐

Yki_:你要算时间成本呀,研究生两三年,博士三四年,加起来就五六年了,如果你本科去腾讯干五年,多领五年的年薪,加上公司内涨薪,可能到时候十五年总薪资也跟博士差不多
点赞 评论 收藏
分享
评论
点赞
收藏
分享

创作者周榜

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