题意
给定n个非负整数a1,a2,…,an,其中每个代表坐标(i,ai)处的一个点。
绘制n条垂直线,线i的两个端点处于(i,ai)和(i,0)处。
找到两条线,它们与x轴一起形成一个容器,使得容器包含最多的水
不允许倾斜,n至少为2
题解
暴力 O(n2) TLE
简单方法 O(n):
简单看来就是一个面积问题,长降低了,宽就得提高,这样才有可能面积更大
用两个指针分别指向数组的第一个和最后一个数,一步一步向中间汇集,小数的指针向中间走一步,直至两指针汇集循环结束。
代码
class Solution {
public:
int maxArea(vector<int>& height) {
int result = 0;
int Area;
int i = 0 ,j=height.size()-1;
while(i<j){
if(height[i]<height[j]){
Area = height[i]*(j-i);
i++;
}else{
Area = height[j]*(j-i);
j--;
}
if(result<Area) result = Area;
}
return result;
}
};