美文网首页
42. 接雨水

42. 接雨水

作者: HITZGD | 来源:发表于2018-12-10 20:51 被阅读0次

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

image.png

示例:
输入: [0,1,0,2,1,0,1,3,2,1,2,1]
输出: 6

思路

image.png
自己在纸上画了一下思路,在上图,黑色虚线表示从左往右搜索的最大值,红色虚线表示从右往左搜索的最大值。有了这两个数组,对每一个柱子(立方体)取left和right最小值,这个最小值就是对应了水面的顶(如果有的话),用这个顶减去当前柱子的高度(水面的底),就是这个位置处对应的水量。由此得到结果。
#include <vector>
#include <algorithm>
using namespace std;
class Solution {
public:
    int trap(vector<int>& height) {
        int size = height.size();
        vector<int> left(size), right(size);
        for (int i = 1; i < size; i++)
            left[i] = max(left[i - 1], height[i - 1]);
        for (int i = size - 2; i >= 0; i--)
            right[i] = max(right[i + 1], height[i + 1]);
        int water = 0;
        for (int i = 0; i < size; i++)
        {
            int level = min(left[i], right[i]);
            water += max(0, level - height[i]);
        }
        return water;
    }
};

int main(int argc, char* argv[])
{
    vector<int> test = { 0,1,0,2,1,0,1,3,2,1,2,1 };
    auto res = Solution().trap(test);
    return 0;
}

相关文章

  • 42. 接雨水

  • 42. 接雨水

    ···class Solution {public int trap(int[] height) {int sum...

  • 42. 接雨水

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

  • 42. 接雨水

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

  • 42.接雨水

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

  • 42. 接雨水

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

  • 42. 接雨水

    题目描述 给定n个非负整数表示宽度为1的柱子高度,按此排序下雨后能接多少水。 示例: 解题思路 每个柱子可接的水量...

  • 42. 接雨水

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

  • 42. 接雨水

  • 42. 接雨水

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

网友评论

      本文标题:42. 接雨水

      本文链接:https://www.haomeiwen.com/subject/onodhqtx.html