11. Container With Most Water[M]盛最多水的容器
题目
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]盛最多水的容器的更多相关文章
- LeetCode 11. Container With Most Water (装最多水的容器)
Given n non-negative integers a1, a2, ..., an, where each represents a point at coordinate (i, ai). ...
- LeetCode:盛最多水的容器【11】
LeetCode:盛最多水的容器[11] 题目描述 给定 n 个非负整数 a1,a2,...,an,每个数代表坐标中的一个点 (i, ai) .在坐标内画 n 条垂直线,垂直线 i 的两个端点分别为 ...
- Java实现 LeetCode 11 盛最多水的容器
11. 盛最多水的容器 给定 n 个非负整数 a1,a2,-,an,每个数代表坐标中的一个点 (i, ai) .在坐标内画 n 条垂直线,垂直线 i 的两个端点分别为 (i, ai) 和 (i, 0) ...
- 力扣Leetcode 11. 盛最多水的容器
盛最多水的容器 给你 n 个非负整数 a1,a2,...,an,每个数代表坐标中的一个点 (i, ai) .在坐标内画 n 条垂直线,垂直线 i 的两个端点分别为 (i, ai) 和 (i, 0).找 ...
- LeetCode---11. 盛最多水的容器(Java)
11. 盛最多水的容器 题目地址:https://leetcode-cn.com/problems/container-with-most-water/ 给你 n 个非负整数 a1,a2,...,an ...
- 【LeetCode】11. Container With Most Water 盛最多水的容器
作者: 负雪明烛 id: fuxuemingzhu 个人博客:http://fuxuemingzhu.cn/ 个人公众号:负雪明烛 本文关键词:盛水,容器,题解,leetcode, 力扣,python ...
- [LeetCode]11. Container With Most Water 盛最多水的容器
Given n non-negative integers a1, a2, ..., an , where each represents a point at coordinate (i, ai). ...
- LeetCode 11. 盛最多水的容器(Container With Most Water)
题目描述 给定 n 个非负整数 a1,a2,...,an,每个数代表坐标中的一个点 (i, ai) .画 n 条垂直线,使得垂直线 i 的两个端点分别为 (i, ai) 和 (i, 0).找出其中的两 ...
- [Swift]LeetCode11. 盛最多水的容器 | Container With Most Water
Given n non-negative integers a1, a2, ..., an , where each represents a point at coordinate (i, ai). ...
随机推荐
- WinForm上传文件,下载文件
上传文件: 使用OpenFileDialog控件选择文件, 具体代码示例: private void btnUpLoadPic_Click(object sender, EventArgs e) { ...
- hdu3938 Portal 离线的并查集
离线算法是将全部输入都读入,计算出所有的答案以后再输出的方法.主要是为避免重复计算.类似于计算斐波那契数列的时候用打表的方法. 题目:给一个无向图,求有多少个点对,使得两点间的路径上的花费小于L,这里 ...
- readonly and const variable
共同点:都是常量: 不同点:const的值必须在编译前确定,通常在声明的同时赋值:而readonly可在运行时确定:
- map 和 for
一.map 函数封装. ; [,,,,,,,].map(function(elem){ sum += elem; }) console.log('sum='+sum); 二.平时用for的写法. ,, ...
- (转载) IaaS, PaaS, Saas
如果你是一个网站站长,想要建立一个网站.不采用云服务,你所需要的投入大概是:买服务器,安装服务器软件,编写网站程序. 现在你追随潮流,采用流行的云计算,如果你采用 IaaS 服务,那么意味着你就不用自 ...
- Angular 定时器$timeout和$interval关于定时刷新页面和发送请求的用法
项目中有用到定时器定时刷新页面的数据,在网上查看了一些资料,整理了一下,备忘. $timeout 用法如下:$timeout(fn,[delay],[invokeApply]); fn:一个将被延迟执 ...
- RxSwiftライブラリの作り方 〜Observer/Observable編〜
RxSwiftライブラリの作り方をご紹介します.一つの記事ですべてを説明するのは非常に厳しいので.まず Observer や Observable といった基本的なコンポーネントとその周辺について.ひ ...
- Rx (Reactive Extensions)介绍
Reactive Extensions (Rx) 原来是由微软提出的一个综合了异步和基于事件驱动编程的库包,使用可观察序列和LINQ-style查询操作. 使用Rx, 开发者可以用Observable ...
- 如何在vue里面正确的引用 jquery 和 第三方插件
vue-cli webpack全局引入jquery(jq通过npm安装的并非本地文件) 1.首先在package.json里加入, dependencies:{ "jquery" ...
- 跳出语句 break continue
break 使用场景:终止switch或者循环 在选择结构switch语句中 在循环语句中 离开使用场景的存在是没有意义的 public static void main(String[] args) ...