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>

  1. ygw on 2015-3-27

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

  2. appow on 2015-5-11

    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]
    }

  3. appow on 2015-5-11

    Oops, should have been <= width

  4. Jason Zhu on 2015-6-21

    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.

  5. vishal jain on 2016-10-2

    its not same as largest histogram problem

  6. Rox on 2017-8-13

    lo
    I m a little confused about this approch
    We have to maximize the Area that can be formed between the vertical lines using the shorter line as length.
    If we want to get the maximum Area, why we should use the shorter line as length?
    And why the area is “seen” as the area of a trapez and not of a rectangle?
    I ask this because there is the possibility to have

    height of a3=8
    height of a5=2
    width=2

    Area=10

    height of a1=5
    height of a7=1
    width=6
    Area=18

    I do not understand why the container is not seen as a trapezoid and as a continer.
    I can not understand how this solution solve the situation when, the width between two lines can be short but if the two lines are the higest,the Area will be grather than a continer with a larger width but with shorter lenght
    Thanks!

Leave a comment

*