类型的引用:Solution *s=new Solution();
1.Container With Most Water
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.
给定一个vector作为纵线的高度输入,选择两条纵线使得他们和X轴一起构成的容器能够盛更多水。
参考:http://blog.csdn.net/patkritlee/article/details/52453417
解析:假设最大容器两条纵线为i,j,那么:a.在j的右端没有一条线会比它高!
b.在i的左端也不会有比它高的线!
c.所以我们从两头向中间靠拢,同时更新候选值;在收拢区间的时候优先从x,y中较小的边开始收缩;
代码:
class Solution {
public:
int maxArea(vector<int>& height) {
int l=0;
int r=height.size()-1;
int area=0;
while(l<r){
area=max(area,(r-l)*min(height[r],height[l]));
//查找l,r之间较小的h,从较小的一端开始逼近,找中间比它高的数值。
if(height[l]<height[r]){
int k=l;
while(height[k]<=height[l])
k++;
l=k;
}
else{
int k=r;
while(height[k]<=height[r])
k--;
r=k;
}
}
return area;
}
};