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.
|
| X
| X X
| X X X X
|X X
|
-----------------------------------------
The idea is to use two pointers, one from left and one from right, keep calculating the area. If leftValue is less than the right value, adjust the left one, otherwise adjust the right one.
public int maxArea(int[] height) {
if (height==null||height.length==0) {
return 0;
}
int leftIndex = 0;
int rightIndex = height.length-1;
int maxArea = 0;
while (leftIndex<rightIndex) {
maxArea = Math.max(maxArea, (rightIndex-leftIndex)*(Math.min(height[leftIndex], height[rightIndex])));
if (height[leftIndex]<height[rightIndex]) {
leftIndex++;
} else {
rightIndex--;
}
}
return maxArea;
}