LeetCode – Container With Most Water (Java)

Problem

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.

Analysis

Initially we can assume the result is 0. Then we scan from both sides. If leftHeight < rightHeight, move right and find a value that is greater than leftHeight. Similarily, if leftHeight > rightHeight, move left and find a value that is greater than rightHeight. Additionally, keep tracking the max value.

container with most water

Java Solution

public int maxArea(int[] height) {
	if (height == null || height.length < 2) {
		return 0;
	}
 
	int max = 0;
	int left = 0;
	int right = height.length - 1;
 
	while (left < right) {
		max = Math.max(max, (right - left) * Math.min(height[left], height[right]));
		if (height[left] < height[right])
			left++;
		else
			right--;
	}
 
	return max;
}
Category >> Algorithms >> Interview >> Java  
If you want someone to read your code, please put the code inside <pre><code> and </code></pre> tags. For example:
<pre><code> 
String foo = "bar";
</code></pre>
  • its not same as largest histogram problem

  • Jason Zhu

    It’s the same as largest histogram problem [http://www.programcreek.com/2014/05/leetcode-largest-rectangle-in-histogram-java/ ] with the same O(N) solution.

  • appow

    Oops, should have been <= width

  • appow

    Javascript solution. Returns an object with fields (i,height).
    //heights: int[] array

    function maxArea( heights ) {
    var width = heights.length-1;
    var objects = [];
    for(var i = 0; i < width; i++){
    var obj = {i:i,height:heights[i]};
    objects.push(obj);
    }
    var sorted = objects.sort(function(a,b){
    return (b.height*b.i – a.height*a.i)
    });

    return sorted[0]
    }

  • ygw

    proof: if Am<An,F(m,n)=(n-m)*Min(Am,An), then F(i,n) for all m<=i<=n. Done.