[原题链接 :11. 盛最多水的容器 - 力扣(Leetcode)](https://leetcode.cn/problems/container-with-most-water/)
- 个人能做的也就到这一步了。想了挺久的TLO了!
class Solution {
public:
int maxArea(vector<int>& height) {
int len=height.size();
int max=0;
for(int cmp=1;cmp<=len-1;cmp++){
for(int i=0;i<=len-2;i++){
if(cmp+i<=len-1){
if(max< cmp*min(height[cmp+i],height[i])){
max=cmp*min(height[cmp+i],height[i]);
}
}
}
}
return max;
}
};
具体如何分析请看我下回分解
VrjpWo.jpeg (1920×1080) (imgloc.com)
大概是这样了。
正确的答案是:
class Solution {
public:
int maxArea(vector<int>& height) {
int max=0,i=0,j=height.size()-1;
int width=0;
while(i!=j){
width=j-i;
int tmin=min(height[i],height[j]);
if(max<width*tmin){
max=width*tmin;
}
height[i]>height[j]?j--:i++;
}
return max;
}
};
我一开始的思路是先不管别的,把每一个都扫描到。
结果是这样的。。。
所以起始代码是
class Solution {
public:
int maxArea(vector<int>& height) {
int len=height.size();
int middle=len/2;
int width=0;
int max=0;
int j=len-1;
for(int i=0;i<=len-1&&j>=0;i++){
width=abs(j-i);
if(width*min(height[i],height[j])>max){
// cout << i << " " << j << " " << width<<" max:"<<max;
max=width*min(height[i],height[j]);
// cout<<"after change"<<max<<endl;
}
}
for(int i=0;i<=j;i++){
width=abs(j-i);
if( (width*min(height[i],height[j]))>max){
// cout << i << " " << j << " " << width<<" max:"<<max;
max=width*min(height[i],height[j]);
// cout<<"after change"<<max<<endl;
}
if(j-i==1){
j--;
i=0;
// cout<<"change"<<i<<" "<<j<<endl;
if(j==0){
break;
}
}
}
return max;
}
};