题目概括

黑色的是柱子,蓝色的是水。

求最多能盛多少水。

解法

有很多解法,比如扫描数组,算出每个位置上到左边、右边的最高柱子的高度, O(n)时间复杂度

下面的解法是找分水岭,比如从左往右遍历,只要找到第一个高度大于最左侧的柱子的,它就是分水岭,这时候就能确定前面的水位。然后后面的和前面的就没关系了,递归执行这个算法。

到最后一段,可能没有更高的柱子了,找不到分水岭,但是可以直接把数组前后颠倒(reverse),再递归调用一次就可以了。

class Solution:

def trap(self, height: List[int]) -> int:

cnt = len(height)

if cnt < 3: return 0

if cnt == 3:

if height[0] > height[1] < height[2]:

return min(height[0],height[2]) - height[1]

return 0

for l in range(cnt):

if height[l] > 0: break

hl = height[l]

cur = l + 1

f = False

v = 0

while cur < cnt:

if height[cur] < hl:

f = True

else:

if f:

for i in range(cur-1, l, -1):

if height[i] < hl:

v += hl - height[i]

return self.trap(height[cur:]) + v

cur += 1

height.reverse()

return self.trap(height)

python 水位_Leetcode 42. 接雨水 - python - 递归 查找分水岭相关推荐

  1. 递归函数python有什么特点_Python中的递归

    在前面的讲解中,函数的调用通常发生在彼此不同的函数之间.其实,函数还有一种特殊的调用方式,那就是自己调用自己,这种方式称为函数递归调用. 递归,在程序设计中也是一个常用的技巧,甚至是一种思维方式,非常 ...

  2. python递归查找_Python程序使用递归查找数字的幂

    python递归查找 Given the base x and the power y and we have to find the x to the power y using recursion ...

  3. python递归查找文件

    需求:给出一个文件路径,查找出该路径下的所有文件. 方法:通过编写函数递归,实现此功能.先判断给出的路径是否为文件,如果是直接结束,–基例: 如果是目录.查找出目录里边的文件和目录,直到找出所有文件为 ...

  4. 小白学 Python 爬虫(42):春节去哪里玩(系列终篇)

    人生苦短,我用 Python 前文传送门: 小白学 Python 爬虫(1):开篇 小白学 Python 爬虫(2):前置准备(一)基本类库的安装 小白学 Python 爬虫(3):前置准备(二)Li ...

  5. 《Think Python》练习 4-2:用函数画花朵

    第4章 案例研究:接口设计 练习 4-2 用函数画花朵 写一组合适的通用函数,用来画出下图所示的花朵图案(最终代码执行效果图): [求解] Step.1 确认组件 如果想通过本张介绍的多边线 poly ...

  6. python 的文件目录拷贝转移,自动递归目录建立目录

    2019独角兽企业重金招聘Python工程师标准>>> #!/usr/bin/env python # -*- coding: utf-8 -*- # Created by weil ...

  7. (第42册)Python项目案例开发从入门到实战——爬虫、游戏和机器学习(第2版) 夏敏捷 郑秋生 尚展垒著

    本书由Python基础开发入手,延伸至爬虫技术开发.游戏开发.人工智能开发.网络应用开发.图像处理和可视化开发6个Python经典开发方向: 全书共提供25个项目案例,以项目驱动方式展开各知识点的讲解 ...

  8. 学python可以做什么知乎-Python学到什么程度可以面试工作?

    0710更新: 不多说,上干货!!!最近得到了一张比较全面的Python图谱,直接分享给你们!!!(我看过,知识点还是很全面的,基础知识.数据分析.爬虫实战.后台开发实战以及人工智能实战项目,都包含了 ...

  9. python第三方库排行-140种Python标准库、第三方库和外部工具

    导读:Python数据工具箱涵盖从数据源到数据可视化的完整流程中涉及到的常用库.函数和外部工具.其中既有Python内置函数和标准库,又有第三方库和工具. 这些库可用于文件读写.网络抓取和解析.数据连 ...

最新文章

  1. 在64位机上PLSQL连oracle11g问题:SQL*Net not properly installed和ORA-12154:TNS:无法处理服务名...
  2. 听说你用JavaScript写代码?本文是你的机器学习指南
  3. 使用Mootools动态添加Css样式表代码,兼容各浏览器
  4. python抓取网页信息_python抓取网页中的动态数据
  5. 10.9 kill以及raise函数
  6. 数据结构(8)----栈与队列之循环队列
  7. [Python]使用 lambda 函数
  8. UIView 中常见的方法总结
  9. 实现一个简单的银行转账操作
  10. 搭建自己的病毒扫描系统clamav-原版教程
  11. 自动与时间服务器时间同步,Windows系统时间同步(附时间同步服务器地址)
  12. 基于Flask框架实现Mock Server
  13. [Mac]图像处理JPEG工具箱jpegtbx_1.4的MATLAB编译及使用
  14. 计算机主板cpu插座分类,Intel历代CPU插槽类型、架构、常用主板大全
  15. block locality
  16. 今日学习在线编程题:可怜的小码哥
  17. OSChina 娱乐弹弹弹——程序猿的酒文化
  18. IBMX3650M4服务器重装window系统
  19. SS00007.algorithm——|ArithmeticMachine.v07|——|Machine:监督学习算法.v06|
  20. 数理逻辑初步:命题逻辑、一阶逻辑和二阶逻辑

热门文章

  1. 【JavaScript】用Switch实现成绩等级判断
  2. 【Java】数组的使用
  3. C#LeetCode刷题之#706-设计哈希映射(Design HashMap)
  4. iphone 2x 3x_iPhone X的未来:从现实到荒诞
  5. add()方法和Put()方法的差别
  6. Oracle(一):简介、安装、DDL、DML、JDBC、导入导出
  7. 大数据技术周报第 007 期
  8. 本地Spark连接远程集群Hive(Scala/Python)
  9. 干货 | ZooKeeper 源码和实践揭秘
  10. Hadoop HA 深度解剖