zoukankan      html  css  js  c++  java
  • LeetCode 42. 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.

    image

    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!

    很经典的题目。从后往前记录一下, 当前位置上,后面数字的最大值。
    然后在从前往后过一遍,用一个数字记录当前位置上前面数字的最大值。然后两者取小就可以了。

    class Solution
    {
    public:
        int trap(vector<int>& height)
        {
            vector<int>vec(height.size());
            int mx = 0;
            for(int i=height.size() - 1; i >= 0; -- i)
            {
                if(height[i] > mx)
                    mx = height[i];
                vec[i] = mx;
            }
            int ans = 0;
            mx = 0;
            for(int i=0; i<height.size(); ++ i)
            {
                if(height[i] > mx)
                    mx = height[i];
                if(min(mx, vec[i]) > height[i])
                    ans += min(mx, vec[i]) - height[i];
            }
            return ans;
        }
    };
    
  • 相关阅读:
    Thread与Handler
    开始机顶盒的生涯
    解决布局被键盘顶的难题
    自动滚动的Textview
    2-解决粘包问题
    1-socket编程
    zipfile模块
    subprocess模块
    day31-异常处理
    collections模块
  • 原文地址:https://www.cnblogs.com/aiterator/p/6628968.html
Copyright © 2011-2022 走看看