思路:
容器容量 Q= (j - i) * min(ai,aj);
设置前后两个游标,从两边向中间移动(那个游标对应的数值小就移动哪个游标),如果新的容器容量大于历史最大容量,则更新最大容器的属性(左右位置和容量大小),最后返回最大容量。
class Solution {
public:
int maxArea(vector<int>& height) {
int headCursor = 0;
int tailCursor = height.size() - 1;
int head =0,tail = 0;
int quantity = 0 ;
int tempQuantity = 0;
int minPosTemp = 0;
while(headCursor<tailCursor){
minPosTemp = minPos(height,headCursor,tailCursor);
tempQuantity = (minPosTemp == headCursor ? height[headCursor] : height[tailCursor]) * (tailCursor - headCursor);
if(quantity < tempQuantity){
quantity = tempQuantity;
head = headCursor;
tail = tailCursor;
}
if(minPosTemp == headCursor){
headCursor++;
}else{
tailCursor--;
}
}
return quantity;
}
int minPos(vector<int>& height,int pos1,int pos2){
return height[pos1] < height[pos2] ? pos1 : pos2;
}
};