这题看似简单,但是有技巧。本来想偷懒试试用for循环嵌套,但是O(n^2)超时。LeetCode论坛上有解法,用两个指针来指向height,开始时,一个left=0,一个right=height.size()-1。通过while循环,当左指针的值小于右指针的值时,左指针++,若右指针的值较小,则右指针--,迭代判断area的大小,从而得出最大值max。
int maxArea(vector<int>& height) {
int max = 0;
int size = height.size();
int left = 0;
int right = size - 1;
while (left < right) {
int area = 0;
if (height[left] < height[right]) {
area = height[left] * (right - left);
left++;
}
else {
area = height[right] * (right - left);
right--;
}
if (max < area) max = area;
}
return max;
}