题目

Given \(n\) non-negative integers \(a_1,a_2,\cdots,a_n\), where each represents a point at coordinate\((i,a_i)\),\(n\) vetical lines are drawn such that the two endpoints of line \(i\) is at \((i,a_i)\) and \((i,0)\). Find two lines, which together with x-axis forms a container, such that the container contains the most water.

Note: You may not slant the container and \(n\) is at least 2.

#思路


思路1:暴力匹配法

考虑到每一种出现的线段组合,并求出这些组合下的最大面积。

思路2:双指针法

两线段的距离越远,面积越大;同时,线段之间形成的容器区域受到长度较短的那条的线段限制。

在数组中使用双指针,一个指向数组的开头,一个指向末尾。计算线段形成的区域面积,并用\(max\)存储目前为止获得的最大区域的面积。此外,指针的移动方向是,较短线段的指针向较长线段的指针移动。

由于矩形容器的面积受限于较短长度的线段,当较长线段的指针向较短线段移动时,矩形面积不会增加。但是,当移动较短线段的指针虽然会影响矩形的宽度的减小,但是由于移动的方向是将较短线段的指针向较长线段的指针移动,矩形会获得更大的高度,这可能会导致面积的增加

Tips


双指针法

利用两个指针来遍历数组,一般来说,遍历数组采用的是单指针。两个指针一般用于有序数组,利用两个相同方向或者相反方向的指针完成遍历。(这里的指针并非C中的指针,而是指数组索引)

C++


  • 思路1
class Solution {
public:
int maxArea(vector<int>$ height){
int max = 0;
for(int i = 0; i< height.size(); i++){
for(int j = 0; j< height.size(); j++){
int wide = height[i] > height[j] ? height[j] : height[i];
int len = j - i;
int temMax = len * wide;
if(tempMax > max)
max = tempMax;
}
}
return max;
}
};
  • 思路2
class Solution {
public:
int maxArea(vector<int>& height){ int pBegin = 0; //开始指针
int pEnd = height.size() - 1; //末尾指针
int max = 0; while(pBegin < pEnd){
int minHeight = height[pBegin] < height[pEnd] ? height[pBegin] : height[pEnd];
int tempMax = minHeight * (pEnd - pBegin); if (tempMax > max)
max = tempMax;
if (height[pBegin] < height[pEnd]){
pBegin ++;
}
else{ pEnd --;
}
}
return max; }
};

Python


  • 思路2
 def maxArea(self, height):
"""
:type height: List[int]
:rtype: int
"""
pBegin = 0
pEnd = len(height) - 1
resInt = 0
while pBegin < pEnd:
curArea = (pEnd - pBegin) *min(height[pBegin], height[pEnd])
if curArea > resInt:
resInt = curArea
if height[pBegin] < height[pEnd]:
pBegin += 1
else:
pEnd -= 1
return resInt

11. Container With Most Water[M]盛最多水的容器的更多相关文章

  1. LeetCode 11. Container With Most Water (装最多水的容器)

    Given n non-negative integers a1, a2, ..., an, where each represents a point at coordinate (i, ai).  ...

  2. LeetCode:盛最多水的容器【11】

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

  3. Java实现 LeetCode 11 盛最多水的容器

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

  4. 力扣Leetcode 11. 盛最多水的容器

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

  5. LeetCode---11. 盛最多水的容器(Java)

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

  6. 【LeetCode】11. Container With Most Water 盛最多水的容器

    作者: 负雪明烛 id: fuxuemingzhu 个人博客:http://fuxuemingzhu.cn/ 个人公众号:负雪明烛 本文关键词:盛水,容器,题解,leetcode, 力扣,python ...

  7. [LeetCode]11. Container With Most Water 盛最多水的容器

    Given n non-negative integers a1, a2, ..., an , where each represents a point at coordinate (i, ai). ...

  8. LeetCode 11. 盛最多水的容器(Container With Most Water)

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

  9. [Swift]LeetCode11. 盛最多水的容器 | Container With Most Water

    Given n non-negative integers a1, a2, ..., an , where each represents a point at coordinate (i, ai). ...

随机推荐

  1. 什么是 HTML5?

    HTML5 是下一代的 HTML. 什么是 HTML5? HTML5 将成为 HTML.XHTML 以及 HTML DOM 的新标准. HTML 的上一个版本诞生于 1999 年.自从那以后,Web ...

  2. Codeforces Round #455

    Generate Login 第二个单词肯定只取首字母 Solution Segments 从1开始的线段和在n结束的线段各自凑一凑,剩下的转化为规模为n-2的子问题. Solution Python ...

  3. 如何修改 WordPress 数据库前缀

    我们知道 WordPress 的数据库表,可以设置前缀,默认是 wp_,很多同学也就默认用了 wp_,如果某种原因(比如提高安全性)要修改的 WordPress 数据的前缀,我们应该怎么做? 开始之前 ...

  4. Hibernate中解决No Hibernate Session bound to thread问题

    引用:忘了 首先是getCurrentSession()与openSession()的区别: 1.getCurrentSession()与openSession()的区别? * 采用getCurren ...

  5. 文件IO详解(四)---标准输入、标准输出和标准错误

    每个进程都会默认打开3个文件描述符,即0.1.2.其中0代表标准输入流.1代表标准输出流.2代表标准错误流.通常标准输入流对应着键盘的设备文件.标准输出流和错误流对应着显示器的设备文件.在编程中通常使 ...

  6. Python基础:条件判断 &&循环

    1:条件判断 2:循环 2.1:for 2.2  while 小结: continue :跳出本次循环 进行下次循环,  break :结束循环体.

  7. BZOJ 1264: [AHOI2006]基因匹配Match DP_树状数组_LCS转LIS

    由于有重复数字,我们以一个序列为基准,另一个序列以第一个序列每个数所在下标为这个序列每个数对应的值. 注意的是,拆值的时候按照在第一个序列中的位置从大到小排,强制只能选一个. 最后跑一边最长上升子序列 ...

  8. WEBGL学习【八】模型视图投影矩阵

    <!--探讨WEBGL中不同图形的绘制方法:[待测试2017.11.6]--> <!DOCTYPE HTML> <html lang="en"> ...

  9. nginx启动、关闭与重启命令

    nginx启动 1.启动nginx:./nginx  2.关闭nginx:./nginx  -s  stop 3.重启nginx:./nginx -s reload

  10. C#中的IEnumerable<T>知识点

    1.扩展IEnumerable<T>的方法 使继承了IEnumeralbe<T>的接口有了MyS方法 static class MySum {                  ...