LeetCode – Container With Most Water (Java)


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.


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])
	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:
String foo = "bar";

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

Leave a comment