[leetcode]Trapping Rain Water @ Python
2014-06-11 10:46
309 查看
原题地址:https://oj.leetcode.com/problems/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
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!
解题思路:模拟法。开辟一个数组leftmosthigh,leftmosthigh[i]为A[i]之前的最高的bar值,然后从后面开始遍历,用rightmax来记录从后向前遍历遇到的最大bar值,那么min(leftmosthigh[i], rightmax)-A[i]就是在第i个bar可以储存的水量。例如当i=9时,此时leftmosthigh[9]=3,而rightmax=2,则储水量为2-1=1,依次类推即可。这种方法还是很巧妙的。时间复杂度为O(N)。
代码:
题意:
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!
解题思路:模拟法。开辟一个数组leftmosthigh,leftmosthigh[i]为A[i]之前的最高的bar值,然后从后面开始遍历,用rightmax来记录从后向前遍历遇到的最大bar值,那么min(leftmosthigh[i], rightmax)-A[i]就是在第i个bar可以储存的水量。例如当i=9时,此时leftmosthigh[9]=3,而rightmax=2,则储水量为2-1=1,依次类推即可。这种方法还是很巧妙的。时间复杂度为O(N)。
代码:
class Solution: # @param A, a list of integers # @return an integer def trap(self, A): leftmosthigh = [0 for i in range(len(A))] leftmax = 0 for i in range(len(A)): if A[i] > leftmax: leftmax = A[i] leftmosthigh[i] = leftmax sum = 0 rightmax = 0 for i in reversed(range(len(A))): if A[i] > rightmax: rightmax = A[i] if min(rightmax, leftmosthigh[i]) > A[i]: sum += min(rightmax, leftmosthigh[i]) - A[i] return sum
相关文章推荐
- [LeetCode] Trapping Rain Water 三种方案 Python
- leetcode 【 Trapping Rain Water 】python 实现
- Leetcode_trapping-rain-water(updated c++ and python version)
- [LeetCode]题解(python):042-Trapping Rain Water
- LeetCode--Trapping Rain Water(捕获雨水)Python
- [Leetcode][python]Trapping Rain Water
- Trapping Rain Water [LeetCode]
- leetcode Trapping Rain Water
- LeetCode 44: Trapping Rain Water
- LeetCode: Trapping Rain Water
- [Leetcode] Trapping Rain Water (Java)
- leetcode Trapping Rain Water
- LeetCode Trapping Rain Water等雨水的凹槽容量
- [LeetCode] Trapping Rain Water
- [LeetCode] Trapping rain water
- Leetcode: Trapping Rain Water
- [leetcode刷题系列]Trapping Rain Water
- 【LeetCode】Trapping Rain Water 2013年美团网校园招聘研发工程师笔试题
- leetcode: Trapping Rain Water
- [LeetCode] Trapping Rain Water 解题报告