1.为什么是双指针
因为双指针代表的是可以作为容器边界的所有位置的范围。
2.面积求法说明
j-i代表底长,min(weight[i],weight[j])代表高
maxarea=max(maxarea,min(weight[i],weight[j])*(j-i)
面积是由短板和两个板之间的距离决定的。
3.为什么先移动短板
情况1 移动长板,min(weight[i],weight[j])的值可能不变或者变小。不变:长板还是长板,变小:长板移动后变成比原先短板更短的短板。但是,j-i,即底长肯定会变小,所以,这样移动一定会变小。
情况2 移动短板,min(weight[i],weight[j])的值有变大的可能,maxarea可能变大。
4.代码说明
int maxArea(vector<int>& height) {
int i = 0;
int j = height.size()-1;
int maxarea=0;
while(i!=j){
maxarea=max(maxarea,min(height[i],height[j])*(j-i));
if(height[i]>height[j]){
j--;
} else{
i++;
}
}
return maxarea;
}