zoukankan      html  css  js  c++  java
  • Leetcode Trapping Rain Water

    Given n non-negative integers representing an elevation map where the width of each bar is 1, compute how much water it is able to trap after raining.

    For example, 
    Given [0,1,0,2,1,0,1,3,2,1,2,1], return 6.

    The above elevation map is represented by array [0,1,0,2,1,0,1,3,2,1,2,1]. In this case, 6 units of rain water (blue section) are being trapped. Thanks Marcos for contributing this image!

    注意对每根柱子能盛的水并不是自身能决定的,而是取决于其左右两边的柱子。

    先记录最高的柱子maxHeight,把数组一分为二,分别计算最高柱子左右两边的盛水量。

    对于最高柱子左边的部分,

      从首端开始扫描,并使用leftHeight记录已扫描部分的中得最高柱子。

      如果leftHeight > curHeight,说明当前柱子能盛水,当前柱子所盛水的容量为leftHeight-curHeight

      如果leftHeight<= curHeight,说明当前柱子不能盛水,则更新leftHeight = curHeight

    对于最高柱子右边的部分,从末端开始倒序扫描,求右半部分的水,即可

    class Solution {
    public:
        int trap(int A[], int n) {
            int maxHeightIndex = 0;
            for(int i = 0 ; i < n; ++ i){
                if(A[i] > A[maxHeightIndex]) maxHeightIndex = i;
            }
            int leftHeight = 0,res = 0;
            for(int i = 0 ; i < maxHeightIndex;++ i){
                if(leftHeight > A[i]) res+=leftHeight-A[i];
                else leftHeight = A[i];
            }
            int rightHeight = 0;
            for(int i = n-1; i>maxHeightIndex; --i){
                if(rightHeight > A[i]) res+=rightHeight-A[i];
                else rightHeight = A[i];
            }
            return res;
        }
    };
  • 相关阅读:
    【JavaScript】underscore
    【JavaScript】jQuery
    【JavaScript】浏览器
    【JavaScript】对象
    【JavaScript】函数
    【JavaScript】快速入门
    【python】异步IO
    【python】web开发
    【python】TCP/IP编程
    【python】常用第三方模块
  • 原文地址:https://www.cnblogs.com/xiongqiangcs/p/3823385.html
Copyright © 2011-2022 走看看