题解 | #接雨水问题#

接雨水问题

http://www.nowcoder.com/practice/31c1aed01b394f0b8b7734de0324e00f



public class Solution {
    /**
     * max water
     * @param arr int整型一维数组 the array
     * @return long长整型
     */
    public long maxWater (int[] arr) {
        // write code here
        if(arr == null || arr.length == 0){
            return 0;
        }
        int left = 0;
        int right = arr.length - 1;
        long result = 0;
        //left .. right 可以看做是一个新桶,桶的高度就是最矮的那个柱子,超过水就会漏出来咯
        //先判断桶右边低还是 左边低
        //盛水高度就是桶的高度减去我们查找的柱子的高度
        //每次从左向右 不断找到比桶高度矮的高度,找不到桶左侧就变小
        //每次也从右向左,找到比桶高度小的,找不到桶右侧就缩小
        //然后桶不断缩小
        while(left < right){
            //桶高度
            int min = arr[left] > arr[right] ? arr[right] : arr[left];
             
             while(left < right && arr[left] <= min){
                 result += min - arr[left];
                 left ++;
             }
             while(left < right && arr[right] <= min){
                 result += min - arr[right];
                 right --;
             }
        }
        return result;
    }
}
全部评论

相关推荐

头像
10-14 20:43
已编辑
东南大学 C++
做个有文化的流氓:被其他部门捞起了,面试时候确认下还是不是原岗位,要是原岗位就是Kpu了
点赞 评论 收藏
分享
09-29 16:59
已编辑
门头沟学院 Java
牛客96609213...:疯狂背刺,之前还明确设置截止日期,还有笔试,现在一帮人卡在复筛,他反而一边开启扩招,还给扩招的免笔试,真服了,你好歹先把复筛中的给处理了再说
投递大疆等公司10个岗位
点赞 评论 收藏
分享
评论
点赞
收藏
分享

创作者周榜

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