思路:2个for循环是不行的,时间复杂度为O(n^2),运行超时。正确思路是 采用双指针,且每次只移动长度短一点的柱子(类似于贪心算法),左指针向右移,右指针向左移,直至两个指针重合,并更新最大容积 max。
int maxArea(int* height, int heightSize) {
int i=0,j=heightSize-1,max=0,t; // i 为左指针, j 为右指针
while(i < j)
{
if(height[i]>height[j])
t=height[j];
else
t=height[i];
if(max < (j-i)*t)
max=(j-i)*t; // 计算公式
// 只移动短一点的柱子,左指针向右移,右指针向左移
if(height[i]>height[j])
j--;
else
i++;
}
return max;
}