Week6: Container With Most Water
Difficulty:Medium
1.Problem
Given n non-negative integers a1, a2, …, an, where each represents a point at coordinate (i, ai). n vertical lines are drawn such that the two endpoints of line i is at (i, ai) 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.
2.Algorithm
1.因为container不能被倾斜,所以container的面积只受高和宽影响
2.又易知,若container的高固定,要使container的面积最大,只能使container的宽最大
3.从1、2两点,设定start=0,end=n,start和end分别为container底部的两个顶点。
4.对于每一对(start,end),计算一次container的面积,其后判断 astart 和 aend 的大小,若 astart 较小,则start++;若 aend 较小,则end- -
5.重复4直到start==end
3.Solution
class Solution {
public:
int maxArea(vector<int>& height) {
int start = 0;
int end = height.size()-1;
int maxArea = 0;
while(start != end) {
int h = 0;
int w = end - start;
if(height[start] < height[end]) {
h = height[start];
start++;
}
else {
h = height[end];
end--;
}
int area = h * w;
if(maxArea < area) {
maxArea = area;
}
}
return maxArea;
}
};