Showing posts with label two pointer. Show all posts
Showing posts with label two pointer. Show all posts

Thursday, April 18, 2013

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.
[解题思路]
双指针的变型,可以实现O(n),别的没什么好说的。
code:
public class ContainerWithMostWater {
    
    public int maxArea(int[] height) {
        int size = height.length;
        if(size == 0){
            return -1;
        }
        
        int i = 0, j = size - 1, v = 0;
        while(i < j){
            int temp = (j - i) * Math.min(height[i], height[j]);
            v = Math.max(v, temp);
            
            if(height[i] < height[j]){
                i++;
            }
            
            else if(height[i] > height[j]){
                j--;
            }
            
            else{
                i++;
                j--;
            }
        }
        return v;
    }
}