算法-----------接雨水(Java版本)

题目

给定 n 个非负整数表示每个宽度为 1 的柱子的高度图,计算按此排列的柱子,下雨之后能接多少雨水。

算法-----------接雨水(Java版本)_第1张图片

思路及解决方法

    static class Solution {
        public int trap(int[] height) {
            /**
             *
             左右两边  积水的高度取决于短的一端
             如果左边的低  那么我们就从左边开始遍历
             默认左边最大的值为最左边的值 如果比最大值小,那么这个值和最大值的差值就可以直接放到结果里面
             否则  更新左边的最大值
             右边亦然
             */
            if (height.length == 0) {
                return 0;
            }
            int result = 0 ;
            int left = 0,right = height.length -1;
            int leftMax = height[left],rightMax = height[right];
            while (left < right) {
                if (height[left] > height[right]){
                    if (height[right]< height[rightMax]) {
                        result += height[rightMax] - height[right];
                    }else {
                        rightMax = right;
                    }
                    right --;
                }  else {
                   if (height[left] > height[leftMax]){
                       leftMax = left;
                   }else {
                        result += height[leftMax] - height[left];
                   }
                   left++;

                }
            }
            return result;
        }
    }

你可能感兴趣的:(java,算法)