#include<iostream>
#include<vector>
#define min(a,b) (a>b? b:a)
#define max(a,b) (a>b? a:b)
using namespace std;
class Solution {
public:
int maxArea(vector<int>& height) {
int i=0; int j=height.size()-1;
int res=(j-i)*min(height[i],height[j]);
while(i<j){
if(height[i]<height[j]){
i++;
}
else
j--;
res=max(res,(j-i)*min(height[i],height[j]));
}
return res;
}
};
看的人家的算法简单的理解了一下
假设取I,J两边界为初始值,那么在选择下个I或者J的时候先去height[I]和height[j]中较小的那个进行改变(假设height[I]<height[j]),因为我的目的是根据找到比较小值i进行改变,这样才能使容积有可能变得更大,如果选择较大值进行改变,改变j,那是不可能使容器更大的,讨论一下就可以知道了,所以就改变I呗,我的目的是是新的height[I]增大,找到下个height[新I]大于height[I]就好了 然后在整理比大小 看谁更大
#include<vector>
#define min(a,b) (a>b? b:a)
#define max(a,b) (a>b? a:b)
using namespace std;
class Solution {
public:
int maxArea(vector<int>& height) {
int i=0; int j=height.size()-1;
int res=(j-i)*min(height[i],height[j]);
while(i<j){
if(height[i]<height[j]){
i++;
}
else
j--;
res=max(res,(j-i)*min(height[i],height[j]));
}
return res;
}
};
看的人家的算法简单的理解了一下
假设取I,J两边界为初始值,那么在选择下个I或者J的时候先去height[I]和height[j]中较小的那个进行改变(假设height[I]<height[j]),因为我的目的是根据找到比较小值i进行改变,这样才能使容积有可能变得更大,如果选择较大值进行改变,改变j,那是不可能使容器更大的,讨论一下就可以知道了,所以就改变I呗,我的目的是是新的height[I]增大,找到下个height[新I]大于height[I]就好了 然后在整理比大小 看谁更大