题目描述
Given n non-negative integers a1, a2, ..., an, where each represents a point at coordinate (i, ai). n vertical lines are drawn such that the two endpoints of line i is at (i, ai) and (i, 0). Find two lines, which together with x-axis forms a container, such that the container contains the most water.
Note: You may not slant the container and n is at least 2.
思路分析
题意要求容器的面积,最简单的方法,遍历数组两次,求出最大面积即可。然而,这种方法超时了0.0,仔细想下,遍历过程中,遍历了太多无关数据,采取两边向中间的方法,夹逼,只需遍历数组一次
代码
public int maxArea(int[] height) {
int max = 0;
int low = 0;
int high = height.length-1;
while (low < high) {
max = Math.max(max, Math.min(height[low], height[high]) * (high-low));
if (height[low] < height[high]){
low++;
}
else{
high--;
}
}
return max;
}
结果