LeetCode 141 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.

分析,維持兩個指針,分別從左右向中間收縮,同時計算裝水量,然後更新最大裝水量。

可以提高效率的技巧是,

如果收縮過程中,碰到的高度還沒有之前的高度高,那麼計算出來的裝水量一定比之前的小,所以可以直接忽略。

public class Solution {
    public int maxArea(int[] height) {
        int i, j, lh, rh, area, tmp, len=height.length;
        
        lh=height[0];
        rh=height[len-1];
        area=0;
        i=0;
        j=len-1;
        while(i<j){
            tmp=Math.min(lh,rh)*(j-i);
            if(tmp > area)
                area = tmp;
            if(lh<rh){
                while(i<j&&height[i]<=lh)
                    i++;//高度更小的就不在考慮
                if(i<j)
                    lh=height[i];
            }else{
                while(i<j&&height[j]<=rh)
                    j--;
                if(i<j)
                    rh=height[j];
            }
        }
        return area;
    }
}


發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章