# 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.

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