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.java

Note: You may not slant the container.數組

    大體意思就是從給定數組中取出任意兩個數,做垂直於X軸的直線和X軸組成一個容器,求這個容器裝滿水最大的可能值。spa

解法一:直接採用遍歷的方法,時間複雜度O(n2),提交上去超時code

解法二:從兩邊往中間遍歷,老是移動較小的那個邊,時間複雜度O(n)。代碼以下:orm

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;
    }
}
相關文章
相關標籤/搜索