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.

ref:

http://blog.unieagle.net/2012/09/16/leetcode%E9%A2%98%E7%9B%AE%EF%BC%9Acontainer-with-most-water/ 

思路是从两头到中间扫描,设i,j分别指向height数组的首尾。
那么当前的area是min(height[i],height[j]) * (j-i)。
当height[i] < height[j]的时候,我们把i往后移,否则把j往前移,直到两者相遇。

 

public int maxArea(int[] height) {
        int start = 0;
        int end = height.length - 1;
        int max = 0;
        while(start < end){
            int container = Math.min(height[start], height[end]) * (end - start);
            if(max < container){
                max = container;
            }
            
            if(height[start] > height[end]){
                end --;
            } else {
                start ++;
            }
        }
        
        return max;
    }

 

posted @ 2014-02-17 13:59  Razer.Lu  阅读(259)  评论(0编辑  收藏  举报