接雨水

/**

* 接雨水

* LeetCode42.

* 给出一排宽度为1、高度为n的柱子,求可以接到雨水的面积

* 示例:height = {1,0,2,1,3,1,0,1,2,0,1} 输出:7

* 使用动态规划的方式去接此题

* */

public int rain(int[] nums){

    int size = nums.length;

    //定义两个数组,用来记录当前位置的左侧最大值/右侧最大值

    int[] maxLeft =new int[size];//左侧最大值

    int[] maxRight =new int[size];//右侧最大值

    maxLeft[0] = nums[0];//初始化

    maxRight[size-1] = nums[size-1];

    //填充左侧最大值,当前左侧最大值=当前值与前一位左侧最大值的max

    for (int i=1; i

        maxLeft[i] = Math.max(nums[i], maxLeft[i-1]);

    }

//填充右侧最大值,当前右侧最大值=当前值与后一位右侧最大值的max

    for (int i=size-2; i>=0;i--){

        maxRight[i] = Math.max(nums[i], maxRight[i+1]);

    }

    System.out.println(Arrays.toString(maxLeft));

    System.out.println(Arrays.toString(maxRight));

    int area =0;

    //计算雨水面积

    //雨水面积 = 当前位置左右侧最小值-当前位置值

    for (int i=0;i

        area += Math.min(maxLeft[i], maxRight[i]) - nums[i];

    }

    return area;

}

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

推荐阅读更多精彩内容