博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
数组可以容纳多少水----------给你出道题
阅读量:7175 次
发布时间:2019-06-29

本文共 1165 字,大约阅读时间需要 3 分钟。

这个问题好像是2015年百度机试题.

问题描述

给定一个数组a[N],可以画一个柱状图.天上下了一场大雨,这个柱状图里面盛了很多雨水,问盛了多少体积的雨水.要求只扫描一次数组.

样例

1 2 3 输出为0

2 1 4 输出为1
4 1 3 输出为2

思路

类似快速排序,双指针移动

代码

import randomdef another_data():   return [random.randint(0, 10) for i in range(500)]def correct_ans(a):   s = 0   for i in range(len(a)):      left = max(a[0:i]) if i > 0 else 0      right = max(a[i + 1:len(a)]) if i < len(a) - 1 else 0      if min(left, right) < a[i]:         continue      else:         s += min(left, right) - a[i]   return sdef mine(a):   s = 0   ans = 0   left, right = 0, len(a) - 1   while left < right:      # print(a,left,right,ans,s)      if a[left] < a[right]:         i = left         while i < right and a[i] <= a[left]:            s += a[i]            i += 1         ans += (i - left) * min(a[left], a[i]) - s         s = 0         left = i      else:         i = right         while i > left and a[i] <= a[right]:            s += a[i]            i -= 1         ans += (right - i) * min(a[right], a[i]) - s         s = 0         right = i   return ansfor i in range(100):   a = another_data()   assert mine(a) == correct_ans(a)

留个课后思考题,如果是一个二维的数组,求雨水的体积?如果是n维的数组呢?n维数组可以用numpy中的ndarray来表示.

转载地址:http://oybzm.baihongyu.com/

你可能感兴趣的文章
初探Java设计模式4:JDK中的设计模式
查看>>
漫谈promise使用场景
查看>>
Design Pattern的万剑归宗 => Mediator
查看>>
Javascript中的原型继承的一些看法与见解
查看>>
HackerRank:JavaScript 是最知名的编程语言
查看>>
Linux修改本地时间
查看>>
elasticsearch字符串包含查询
查看>>
5- Flask构建弹幕微电影网站-项目分析、搭建目录及模型设计
查看>>
Mysql四种常见数据库引擎
查看>>
《Kotin 极简教程》第7章 面向对象编程(OOP)(1)
查看>>
Chrome吃内存的能力可不是说着玩的!
查看>>
IntelliJ IDEA 详细图解最常用的配置 ,适合刚刚用的新人
查看>>
[20180619]fsc表示什么.txt
查看>>
域名对SEO的影响大吗?
查看>>
7年苦心钻研自动驾驶,最终Alphabet选择削减投入
查看>>
农民伯伯的福利到了,AR技术让种地更加easy
查看>>
4年后,nuTonomy要在10城市运行无人驾驶车
查看>>
李开复预言:人工智能将在10年后让50%的人失业
查看>>
iStaing获500万美元投资,VR室内设计离我们还远吗?
查看>>
JFinal结合Sigar、echarts实现后台服务器监控
查看>>