给你 nnn 个非负整数 a1,a2,…,ana_1, a_2, \dots, a_na1​,a2​,…,an​,每个数代表坐标中的一个点 (i,ai)(i, a_i )(i,ai​)。在坐标内画 nnn 条垂直线,垂直线 iii 的两个端点分别为 (i,ai)(i, a_i)(i,ai​) 和 (i,0)(i, 0)(i,0)。找出其中的两条线,使得它们与 x 轴共同构成的容器可以容纳最多的水。

示例1

输入:[1, 8, 6, 2, 5, 4, 8, 3, 7]
输出:49
解释:图中垂直线代表输入数组 [1, 8, 6, 2, 5, 4, 8, 3, 7]。在此情况下,容器能够容纳水(表示为蓝色部分)的最大值为 49。

示例2

输入:height = [1,1]
输出:1

示例3

输入:height = [4,3,2,1,4]
输出:16

示例4

输入:height = [1,2,1]
输出:2

分析

1.根据上面的示例,要得到一个盛水最多的容器, 即
Area=max⁡(width×height)\text{Area}=\max(\textrm{width} \times \textrm{height})Area=max(width×height)。
其中
width=∣i−j∣,i,j∈[0,len(HeightList)]\textrm{width}=|i - j|, i, j \in[0,\textrm{len(HeightList)}]width=∣i−j∣,i,j∈[0,len(HeightList)];
height=min⁡(HeightList[i],HeightList[j])\textrm{height}=\min (\textrm{HeightList}[i], \textrm{HeightList}[j])height=min(HeightList[i],HeightList[j])。
2.可以直接采用暴力解法,每两根“柱子”都有一种盛水的方式,比较即可。时间复杂度为 O(n2)O(n^2)O(n2)
3.从 width=∣i−j∣\textrm{width}=|i-j|width=∣i−j∣ 出发,考虑另外的方法。若 ∣j−i∣=len(List)−1|j-i|=\textrm{len(List)}-1∣j−i∣=len(List)−1,且 HeightList[i]=HeightList[j]=max⁡(height)\textrm{HeightList}[i]=\textrm{HeightList}[j]=\max\text{(height)}HeightList[i]=HeightList[j]=max(height)。那么此时的 Area\text{Area}Area 就是最大的。
4.基于3的想法,那么可以使用双指针法。初始化:一个指针定义在 HeightList\text{HeightList}HeightList 的头部(左指针 lll),一个指针定义在尾部(右指针 rrr)。从列表外部到内部的遍历,时间复杂度为 O(n)O(n)O(n)。
5.当 HeightList[l]<HeightList[r]\text{HeightList}[l] <\text{HeightList}[r]HeightList[l]<HeightList[r],左指针右移;否则,右指针左移。即移动最小高度的指针。记录并比较每次的面积。
6.关于为什么要移动值小的指针而不移动值大的?
解释:若移动值大的而不移动值小的,height\text{height}height 可能就一直是这个最小值,width\text{width}width 同时在减小,又 Area=width×height\text{Area} = \text{width} \times \text{height}Area=width×height,那么 Area\text{Area}Area 只减不增。

code

class Solution(object):def maxArea(self, height):""":type height: List[int]:rtype: int"""n = len(height)l = 0r = n - 1maxArea = 0while l < r:wid = r - lhei = min(height[l], height[r])tempArea = wid * heimaxArea = max(maxArea, tempArea)if height[l] <= height[r]:l += 1else:r -= 1return maxArea

LeetCode11 盛最多水的容器相关推荐

  1. leetcode11盛最多水的容器

    题目描述:给你 n 个非负整数 a1,a2,-,an,每个数代表坐标中的一个点 (i, ai) .在坐标内画 n 条垂直线,垂直线 i 的两个端点分别为 (i, ai) 和 (i, 0) .找出其中的 ...

  2. python容器装水_Python版LeetCode11. 盛最多水的容器

    本文转载自[微信公众号:机器学习算法与Python精研,ID:AITop100]经微信公众号授权转载,如需转载与原文作者联系 题目: 给定 个非负整数 1,2,...,n,每个数代表坐标中的一个点 ( ...

  3. LeetCode11.盛最多水的容器

    题目描述: 给定 n 个非负整数 a1,a2,-,an,每个数代表坐标中的一个点 (i, ai) .在坐标内画 n 条垂直线,垂直线 i 的两个端点分别为 (i, ai) 和 (i, 0).找出其中的 ...

  4. 漫画:腾讯面试题(盛最多水的容器)

    来自:小浩算法 01 PART 盛最多水的容器 这道题目会了的朋友可能觉得很简单,但是我觉得这题实在很经典,所以还是得拿出来讲讲.还有一个进阶版本"接雨水",将在后面为大家讲解. ...

  5. leetcode最小面积_每日一道 LeetCode (51):盛最多水的容器

    ❝ 每天 3 分钟,走上算法的逆袭之路. ❞ 前文合集 每日一道 LeetCode 前文合集 代码仓库 GitHub:https://github.com/meteor1993/LeetCode Gi ...

  6. 【LeetCode】1. 盛最多水的容器:C#三种解法

    题目:https://leetcode-cn.com/problems/container-with-most-water/ 盛最多水的容器 难度:中等 给你 n 个非负整数 a1,a2,...,an ...

  7. 11. 盛最多水的容器 golang

    11. 盛最多水的容器 (一道比较特殊的题) 之所以说特殊是因为这个题用动态规划反而比暴力破解法还复杂. 这种容器的题,就是前后指针方向.尽量别考虑别的思路. 11. 盛最多水的容器 给你 n 个非负 ...

  8. [Leedcode][JAVA][第11题][盛最多水的容器][双指针][贪心]

    [问题描述]11.盛最多水的容器 给你 n 个非负整数 a1,a2,...,an,每个数代表坐标中的一个点 (i, ai) .在坐标内画 n 条垂直线,垂直线 i 的两个端点分别为 (i, ai) 和 ...

  9. leecode-11盛最多水的容器C版-双指针的使用

    1. 盛最多水的容器 描述:给你 n 个非负整数 a1,a2,-,an,每个数代表坐标中的一个点 (i, ai) .在坐标内画 n 条垂直线,垂直线 i 的两个端点分别为 (i, ai) 和 (i, ...

  10. LeetCode 11. 盛最多水的容器

    11. 盛最多水的容器 思路:双指针,放弃低的那边 class Solution { public:int maxArea(vector<int>& height) {int n= ...

最新文章

  1. linux命令--df命令du命令
  2. Sabayon:治理 GNOME 用户的设置
  3. 配置策略路由(PBR)
  4. HDU - 4253 Two Famous Companies(二分+最小生成树)
  5. CNI (Container Network Interface)
  6. !--[if IE 9] ![endif]--
  7. c语言图像函数怎么用,请教 怎么才能用C输出一个函数的图像?大侠 帮帮忙啊...
  8. DOM——获取元素的方式
  9. 实体店如何做好门店引流
  10. LeetCode 240. Search a 2D Matrix II
  11. java正则过滤小括号,java正则表达式获取大括号小括号内容并判断数字和小数亲测可用...
  12. 全国计算机等级考试(NCRE)三级网络技术、四级网络工程师题库软件分享
  13. 书屋(二):《我的成功可以复制》不妨一读
  14. android自动点击开红包,自动点击连点器
  15. 请详细说下你对 vue 生命周期的理解?
  16. electron 微信扫码登录(第三方登录)
  17. Dwz点击左侧菜单动态添加Tab标签图标
  18. “游匣”冲击暑期档——戴尔为中国用户定制笔记本电脑
  19. 光纤设备及跳线接口图鉴
  20. 《读者》的“卷首语” (二)

热门文章

  1. 读书笔记-----Oracle字符处理函数列表
  2. 6月8日 论文书写——公式
  3. HashTable 源码解析 jdk1.8
  4. Java多线程实现-线程池
  5. 服务容错保护Hystrix
  6. Crash Course经济学笔记
  7. 启用zhparser插件时一直报Permission denied
  8. 【LDAP】LDAP常用命令解析
  9. golang net/http访问https
  10. JavaScript学习之旅-9(原创)