问题:如下图,把三维简化成二维,体积对应面积,那两块板就能盛水,而两块板能盛的水量取决于两者之间的短板,水量即为长度×高度(长度为两块板之间的距离,高度即为短板的高度)

目标:求最大面积
思路:
已知条件:
1、面积=长度×高度
2、第1块板与最后一块板之间的距离是最大的
推导:
1、当第1块板的高度<最后一块板时,面积中的高度=第1块板的高度
1)其他板要么比第1块板高
那他们之间的面积=第一块板的高度×它们之间的距离,明显要小于第1块板与最后1块板组成的面积
2)要么比第1块板矮
那他们之间的面积=其他板的高度(比第一块板矮)×它们之间的距离,明显也小于第1块板与最后1块板
组成的面积
2、当第1块板的高度>最后一块板时,面积中的高度=最后一块板的高度,同1
1)其他板要么比最后一块板高
那他们之间的面积=最后一块板的高度×它们之间的距离,明显要小于第1块板与最后1块板组成的面积
2)要么比最后一块板矮
那他们之间的面积=其他板的高度(比最后一块板矮)×它们之间的距离,明显也小于第1块板与最后1块板
组成的面积
结论:
1、当第1块板的高度<最后一块板时,它们之间的面积就是最大的,在该轮中,其他板不再需要去遍历,下一轮,用第2块板与最后一块板的高度进行比较
2、当第1块板的高度>最后一块板时,它们之间的面积也是最大的,在该轮中,其他板不再需要去遍历,下一轮,用倒数第2块板与第1块板的高度进行比较
所以,不管第1块板与最后1块板,两者之间谁更高,在该轮循环的最后,都是将较矮那块板的位置往左(右)移1位

import operatorx = [6, 9, 8, 3, 5, 2, 10, 4]            # 每块板的高度
i = 0                      # 第1块板
j = len(x)-1               # 最后1块板
area = []                  # 存储下标及面积的空列表
while i < j:             # 当左右两块板相遇时,结束循环if x[i] < x[j]:                   # 当左边板的高度<右边板的高度area.append((i, j, (j-i)*x[i]))              # 将左右下标及面积作为一个元组加到area列表中i = i+1                          # 左边板向右移动1else:                         # 当左边板的高度>=右边板的高度area.append((i, j, (j-i)*x[j]))                # 将左右下标及面积作为一个元组加到area列表中j = j-1                           # 右边板向左移动1
MAX = max(area, key=operator.itemgetter(2))               # 查出列表中的最大面积
print(MAX)

木桶理论的运用——利用python快速求解长短不一的板的最大盛水量相关推荐

  1. windows和Linux利用Python快速搭建一个网站

    windows和Linux利用Python快速搭建一个网站 一.windows 步骤1:安装Python3(自行百度) 步骤2:在cmd窗口输入ipconfig查看本机ip地址,IPV4那一行.如:1 ...

  2. 利用python来求解网络的平均路径长度和聚类系数

    利用python来求解网络的平均路径长度和聚类系数 # -*- coding: utf-8 -*- """ Created on Mon Aug 19 13:14:12 ...

  3. 钉钉一行代码_利用Python快速搭建钉钉和邮件数据推送系统

    前面的文章我们写到了利用Python实现钉钉和邮件的数据推送,在数据处理这一块实现了对mysql和odps的数据获取和处理,可以满足常规业务大部分数据场景需求,在一家初创公司数据基础建设还不完善的时候 ...

  4. 教你一招利用Python快速去除图片水印

    大家好,我是IT界搬运工. 相信大家都有在网上下载好图片但是有水印的烦恼,那么问题就来了:看到心爱的图片想要"占为己有".怎么把图片上的水印去除呢?今天我就来教你一招利用Pytho ...

  5. 利用Python快速绘制海报级别地图

    利用Python快速绘制海报级别地图 1.简介 2.利用prettymaps快速制作海报级地图 2.1 prettymaps的几种使用方式 2.1.1 圆形模式 2.1.2 圆角矩形模式 2.1.3 ...

  6. python 播放视频 ftp_利用Python快速搭建HTTPFTP服务器

    用 Python 快速实现 FTP 服务器 有时当你想快速搭建一个 FTP 服务器来临时实现文件上传下载时,这是特别有用的.我们这里利用 Python 的Pyftpdlib 模块可以快速的实现一个 F ...

  7. 【Python数据分析】利用Python快速对两个EXCEL表格进行内容比较并找出差异

    如何快速找到两个EXCEL表格的数据差异?今天就与大家分享如何利用Python数据分析3分钟搞定,不管EXCEL表格有多少行数据,代码总是那么几行.不多说了,上案例(文末附Python数据分析案例下载 ...

  8. 利用python快速将一个工作表拆分成多个工作簿

    利用python提高工作效率的一个小技巧 很多人会在日常的工作中遇到这样的工作需求:需要将一个总表按"分公司/按月份"等拆分成多个工作簿,分发给对应的人员.一开始想到的方法是:第一 ...

  9. 利用python快速转换GenBank和RefSeq的染色体号

    1.解决问题:在NCBI中参考基因组的GenBank和RefSeq sequence拥有不同的染色体号(如下图),某些情况下需要进行染色体号的相互转化.故自己写一个python脚本,进行简易的转化. ...

最新文章

  1. Nature: 海洋病毒对环境基因组和潜在的生物地球化学影响
  2. 自训练 + 预训练 = 更好的自然语言理解模型
  3. ARP-Address Resolution Protocol-地址解析协议
  4. [vue] 说说你对MVC、MVP、MVVM模式的理解
  5. 二维码提升对比度文献调研(1)--Fast Image Processing with Fully-Convolutional Networks
  6. 今天提交了一个patch开心,呵呵
  7. java jobdetail_Spring创建JobDetail的两种方式
  8. 1909升级卡64_【春节配置推荐】第3期:设计娱乐万元配置推荐、四代升级建议参考...
  9. 关于本地缓存localstorage与sessionStorage 数组 (array)字符串(string) 对象(object)的存储技巧和注意事项...
  10. 大学计算机系最努力的同学都是如何学习的?
  11. 在Mac osx使用ADT Bundle踩过的坑
  12. 最方便简单的经纬度查询方法
  13. 学校oj显示在线用户数超过了序列号允许。您需要购买或升级您的序列号
  14. mongodb默认的用户名密码_MongoDB 用户名密码登录
  15. linaro 网站资源
  16. DataSourceClosedException: dataSource already closed
  17. 【Scala】Scala中的模式匹配、类型参数与隐式转换
  18. 奔涌吧 后浪!!! 哔哩哔哩 何冰
  19. 一个大型虚拟项目包含位于不同地点的许多干系人_PLAN8T ART 丨在虚拟维度的拼贴现实中,漫游,想象。...
  20. Vue 数据双向绑定

热门文章

  1. 计算机的串行通信分析,串行通信和并行通信的区别分析
  2. Oracle如何将表导出为Excel表
  3. libpcap linux安装,CentOS 7 下安装 libpcap
  4. Linux安全加固指南之葵花宝典
  5. ts 格式化日期输出
  6. Oracle Flashback(闪回) 详解.
  7. android电池波形检测图表,智能手机平台心电图波形实时准确绘制方法
  8. System.ComponentModel.Win32Exception:“创建窗口句柄时出错。 如何解决
  9. QCharts绘制柱状图,柱高和y轴数据刻度不匹配
  10. Powershell如何修改组策略(group policy)