[LintCode 363] 接雨水(Python)
2017-09-20 18:08
417 查看
题目描述
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.样例
如上图所示,海拔分别为 [0,1,0,2,1,0,1,3,2,1,2,1], 返回 6.
思路
观察图片可知,接满雨水后,总体呈现先增后降的趋势。所以先遍历一遍,找到峰值的下标。再从两头向峰值遍历,不符合递增趋势的数值,都是需要计算填充差值的。代码
class Solution: """ @param: heights: a list of integers @return: a integer """ def trapRainWater(self, heights): # write your code here if heights is None or len(heights) <= 2: return 0 max_id = 0 for i in range(1, len(heights)): if heights[i] > heights[max_id]: max_id = i res = 0 s = 0 cur = heights[s] while s < max_id: if heights[s] >= cur: cur = heights[s] else: res += 1 * (cur - heights[s]) s += 1 e = len(heights) - 1 cur = heights[e] while e > max_id: if heights[e] >= cur: cur = heights[e] else: res += 1 * (cur - heights[e]) e -= 1 return res
复杂度分析
时间复杂度O(n),空间复杂度O(1)。相关文章推荐
- python_lintcode_730. 所有子集的和_720. Rearrange a String With Integers
- python_lintcode_737. Find Elements in Matrix_451. 两两交换链表中的节点
- lintcode python 代码 514 栅栏染色
- [LintCode 102] 带环链表(Python)
- [LintCode 107] 单词切分(Python)
- lintcode刷题(python)——(4)
- python_lintcode_167链表求和
- python_lintcode_69二叉树的层次遍历
- python_lintcode_115不同的路径 II_112删除排序链表中的重复元素
- python_lintcode_109数字三角形_50数组剔除元素后的乘积
- LintCode Python 丑数II
- lintcode刷题(Python)(2)
- lintcode python 代码 514 栅栏染色
- python_lintcode_93. 平衡二叉树_165. 合并两个排序链表_453. 将二叉树拆成链表
- [LintCode]Fibonacci(Python)
- LintCode 15.全排列 python 解法
- python_lintcode_100删除排序数组中的重复数字 _101删除排序数组中的重复数字2
- [LintCode 186] 最多有多少个点在一条直线上(Python)
- [LintCode 197] 排列序号(Python)
- 雨水,lintcode