leetcode -eleven:Container With Most Water

    Given n non-negative integers a1a2, ..., an, where each represents a point at coordinate (iai). n vertical lines are drawn such that the two endpoints of line i is at (iai) 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轴组成一个容器,求这个容器装满水最大的可能值。

解法一:直接采用遍历的方法,时间复杂度O(n2),提交上去超时

解法二:从两边往中间遍历,总是移动较小的那个边,时间复杂度O(n)。代码如下:

public class Solution {
    public int maxArea(int[] height) {
        int left=0,right=height.length-1;
        int max=0,w,h,index;
        
        while(left<right){
            w=right-left;
            h=height[left]>height[right]?height[right]:height[left];
            if(max<(w*h))
                max=w*h;
            if(height[left]<height[right]){
                index=left;
                index++;
                while (index<right && height[left]>=height[index])
                    index++;
                left=index;
            }else {
                index=right;
                index--;
                while (index>left && height[right]>=height[index] )
                    index--;
                right=index;
            }
        }
        return max;
    }
}


你可能感兴趣的:(LeetCode,maxArea)