1.首先我们思考一件事,决定容器大小的因素有两个:高度和宽度,两个变量,所以找出最大容器需要同时考虑这两个,那么为了解决问题,我们就需要先定一个因素,定高度显然不理想,还需要先查找,所以我们先找最大宽度,即数组两边的柱子,确定一个初始容器,那么就要接着找比原来还大的容器,就需要往中间移,怎么移就是我们接着要考虑的问题?
2.两个指针动一个宽度就要减一,这时我们需要先比较两边柱子谁高,显然如果移动较高的柱子,接下来的容器大小一定小于原来容器大小,(因为容器的高度是有较小的柱子决定的,宽度减小了,高度只会由接下来更小的柱子决定)就会丢失最大值,显然不对。
3.所以由此我们需要移动较小的哪根柱子,如此不会缺失最大值。
看代码:
class Solution {
public:
int maxArea(vector<int>& height) {
int res;
int i=0,j=height.size()-1;
while(i<j){
int s=(j-i)*min(height[i],height[j]);
res=max(s,res);
if(height[i]<height[j]){
i++;
}
else
j--;
}
return res;
}
};