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.

Note: You may not slant the container and n is at least 2.

   /*
    假如a[left]<a[right],则0-1,0-2,...,0-5都比0-6小,故left++
    假如a[left]>a[right],则1-6,2-6,...,5-6都比0-6小,故right--
     */
    /*
    O(n^2)
    public int maxArea(int[] height){
        int max = Integer.MIN_VALUE;
        int temp = 0;
        for (int i=0;i<height.length;i++){
            for (int j=height.length-1;j>i;j--){
                temp = (height[i]>height[j]?height[j]:height[i])*(j-i);
                if (temp>max){
                    max = temp;
                }
            }
        }
        return max;
    }
    */
    public int maxArea(int[] height){
        int max = Integer.MIN_VALUE;
        int left = 0;
        int right = height.length-1;
        while (left<right){
            max = Math.max(max,Math.min(height[left],height[right])*(right-left));
            if (height[left]<height[right]){
                left++;
            }
            else{
                right--;
            }
        }
        return max;
    }
原文地址:https://www.cnblogs.com/bingo2-here/p/7507558.html