美文网首页算法学习
算法题--求蓄水池的蓄水量

算法题--求蓄水池的蓄水量

作者: 岁月如歌2020 | 来源:发表于2020-03-22 00:26 被阅读0次
image.png

0. 链接

题目链接

1. 题目

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.

image.png

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!

Example:

Input: [0,1,0,2,1,0,1,3,2,1,2,1]
Output: 6

2. 思路:动态规划

2.1 先从左到右计算截止到目前位置的最大值(作用是以左边作为参考依据,水坑全部填平)
2.2 再从右到左计算截止到目前为止的最大值(作用是以右边作为参考依据,水坑全部填平)
2.3 由于前两步得到的意见都是片面的,存在的主要问题是只考虑了一边作为参照物,没考虑另一半的开区间存不住水的问题; 所以这一步需要修正边界处的问题:方法是在每个位置,取两者得到结果的较小值,即为水池填充后的真实值,再减去原始数组的值,即得到填充的总水量

3. 代码

class Solution1:
    def trap(self, height: List[int]) -> int:
        length = len(height)
        left_max = [height[0]]
        right_max = [height[length - 1]]

        for i in range(1, length):
            left_max.append(max(left_max[i - 1], height[i]))

        for i in range(length - 2, -1, -1):
            right_max.append(max(right_max[length - 2 - i], height[i]))

        rtn = 0
        for i in range(length):
            rtn += min(left_max[i], right_max[length - 1 - i]) - height[i]

        return rtn

solution = Solution1()
print(solution.trap([0,1,0,2,1,0,1,3,2,1,2,1]))
print(solution.trap([2,1,0,2]))

输出结果

6
3

4. 结果

image.png

相关文章

  • 算法题--求蓄水池的蓄水量

    0. 链接 题目链接 1. 题目 Given n non-negative integers representi...

  • leetcode382. Linked List Random

    这道题本质是到蓄水池算法 https://leetcode.com/problems/linked-list-ra...

  • 旧词俗语(四十五,饮用水版)

    旧词 “老黄牛”。 沟沟坎坎。 提灌。 蓄水池。 蓄水量。 输水管。 水阀。 投工投劳。共同出力。 挨家挨户。 桃...

  • 蓄水池抽样算法(Reservoir Sampling)

    蓄水池抽样算法(Reservoir Sampling) 许多年以后,当听说蓄水池抽样算法时,邱simple将会想起...

  • 大型互联网公司android面试题(转载)

    第一面 1 手写算法题。 猫扑素数;1到n,求1的个数;单词反转;不会太难,主要考察你的代码规范,算法题基本会在第...

  • python算法题---求众数

    刷题顺序是按照LeetCode的算法面试题汇总进行的. 给定一个大小为 n 的数组,找到其中的众数。众数是指在数组...

  • 蓄水池算法

    问题描述: 给你一个长度为N的链表。N很大,但你不知道N有多大。你的任务是从这N个元素中随机取出k个元素。你只能遍...

  • 蓄水池算法

    今天在网上看题目时,发现一个十分有趣的算法,叫蓄水池算法(Reservoir Sampling),牵扯到一点概率论...

  • 蓄水池算法

    最近有个需求,需要从不固定大小的数据集中取固定数量的数据作为样本,有个同学提到了蓄水池算法,于是了解了一下。 蓄水...

  • 最简单的算法题,你会吗?

    leetcode上算法第一题,求两数之和,是最简单的算法题。 给定一个整数数组 nums 和一个目标值 targe...

网友评论

    本文标题:算法题--求蓄水池的蓄水量

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