in LintCode Array ~ read.

Container With Most Water

LintCode-383.Container With Most Water

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.

Example: Given [1,3,2], the max area of the container is 2.

public class Solution {  
    /**
     * @param heights: an array of integers
     * @return: an integer
     */
    public int maxArea(int[] heights) {
        if (heights == null || heights.length == 0) {
            return 0;
        }

        int low = 0, high = heights.length - 1;
        int max = 0;

        while (low < high) {
            max = Math.max(max, (high - low) * Math.min(heights[low], heights[high]));

            if (heights[low] < heights[high]) {
                low++;
            } else {
                high--;
            }
        }

        return max;
    }
}

Hope this helps,
Michael