Monday, February 29, 2016

[LeetCode] 11. 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.


1. Two pointer scan with greedy.

public class Solution {
    public int maxArea(int[] height) {
        int len = height.length;
        if(0 == len)
            return 0;

        int res = -1;
            
        int i = 0;
        int j = len-1;
        
        while(i < j){
            int hI = height[i];
            int hJ = height[j];
            
            int water = Math.min(hI, hJ)*(j - i);
            if(water > res){
                res = water;
            }
            
            if(hI < hJ){
                i++;
            }else{
                j--;
            }
        }
        
        return res;
    }
}

No comments:

Post a Comment