题目描述
给定一个长度为 n 的整数数组 height 。有 n 条垂线,第 i 条线的两个端点是 (i, 0) 和 (i, height[i]) 。
找出其中的两条线,使得它们与 x 轴共同构成的容器可以容纳最多的水。
返回容器可以储存的最大水量。
说明:你不能倾斜容器。
示例 1:
输入:[1,8,6,2,5,4,8,3,7]
输出:49
解释:图中垂直线代表输入数组 [1,8,6,2,5,4,8,3,7]。在此情况下,容器能够容纳水(表示为蓝色部分)的最大值为 49。
出处
思路
有点贪心的思想,首先左右双指针指向首尾。
在每个状态下,无论长板或短板向中间收窄一格,都会导致水槽底边宽度 变短。
若从短板处向内 ,水槽的短板可能变大,因此下个水槽的面积可能增大 。若从长板处向内 ,水槽的短板 不变或变小,因此下个水槽的面积一定变小 。
迭代更新最大值即可。
代码
class Solution {
public:
int maxArea(vector<int>& height) {
vector<int>::iterator right = height.end()-1;
vector<int>::iterator left = height.begin();
int max = 0, tmp = 0;
while (left < right){
if(*left<*right){
tmp = distance(left, right)*(*left);
left++;
}
else{
tmp = distance(left, right)*(*right);
right--;
}
if(tmp>max)
max = tmp;
}
return max;
}
};