题目:给定一个数组序列a[n],找出两个值,使以者两个值围成的区域可以容纳最多的水
思路:设a[0]和a[n-1]容纳的水为T,则a[m]和a[n]容纳的水大于T只可能在a[m]大于a[0]或者a[n]大于a[n-1]的情况。故可以选择从两端向中间逼近,查找最大值,时间复杂度O(N),
class Solution {
public:
int maxArea(vector<int> &height){
long long max_contain=0;
long long val=0;
int i=0;int j=height.size()-1;
long long temp;
while(i<j){
if(height[i]>=height[j])temp=height[j]*(j-i);
else temp=height[i]*(j-i);
if(temp>max_contain)max_contain=temp;
if(height[i]<height[j]){
int m=i;
while(height[m]<=height[i]&&m<j)m++;
i=m;
}
else{
int n=j;
while(height[n]<=height[j]&&n>i)n--;
j=n;
}
}
if(max_contain>2147483647)return 2147483647;
else
return max_contain;
}
};