力扣练习第七天——盛最多水的容器

力扣练习第七天——盛最多水的容器

题目大致如下:
给定 n 个非负整数 a1,a2,…,an,每个数代表坐标中的一个点 (i, ai) 。在坐标内画 n 条垂直线,垂直线 i 的两个端点分别为 (i, ai) 和 (i, 0)。找出其中的两条线,使得它们与 x 轴共同构成的容器可以容纳最多的水。
注:不可倾斜容器,且n>=2。

示例:
输入:[1,8,6,2,5,4,8,3,7]
输出:49

链接来源于LeetCode:https://leetcode-cn.com/problems/container-with-most-water/

大致思路:
最开始想的很简单,直接暴力破解,从起点到终点一个一个的遍历,然后一个一个的计算出值,保留最大值。
但是这样做了一下,运算超时。
于是便改进了遍历的方式,选择两头夹的方式。每次,左端或右端向中间移动一个单位(由谁产生的容量更大决定),再每次去更新产生的数据。

代码大致如下:

class Solution{
public:
int maxArea(vector<int> &height){
int maxn=0,L=0,R=height.size()-1;
while(L<R){          //两头夹遍历           
	maxn=max(maxn,min(height[R],height[L])*(R-1));
	if(height[R]>height[L])    L++;  //对比左端与右端谁产生更多的容量
	else   R--;
}
return maxn;
}
};

结果如下:力扣练习第七天——盛最多水的容器_第1张图片

你可能感兴趣的:(#,训练50天)