In this Leetcode container with the most water problem solutions, we have 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 are at (i, ai) and (i, 0). we need to find two lines, which together with the x-axis form a container, such that the container contains the most water.

Leetcode container with most water problem solution


Problem solution in Python.

class Solution:
    def maxArea(self, height: List[int]) -> int:
        largest = 0
        l, r = 0, len(height) - 1
        while l < r:
            area = (r- l) * min(height[l], height[r])
            largest = max(largest, area)
            if height[l] < height[r]:
                l += 1
            else:
                r -= 1
        return largest



Problem solution in Java.

public class Solution {
public int maxArea(int[] height) {
    int maxarea=0;
    int temparea=0;
    int m=0,n=height.length-1;
    while(m!=n){
        if(height[m]<height[n]){
            temparea=height[m]*(n-m);
            m++;
        }
        else{
            temparea=height[n]*(n-m);
            n--;
        }
        if(maxarea<temparea) maxarea=temparea;
    }
    return maxarea;
}
}


Problem solution in C++.

class Solution {
public:
    int maxArea(vector<int>& height) 
    {
        int res=0,left=0,right=height.size()-1;
        while(left<right)
        {
            int lower=height[height[left]<height[right]?left++:right--];
            res=max(res,(right-left+1)*lower);
        }
        return res;
    }
};


Problem solution in C.

int min(int a, int b) {
    return((a < b) ? a : b);
}
int maxArea(int* height, int heightSize) {
    int maxArea=0, area;
    int i, j, w, h;
    
    for (i = 0, j = heightSize-1; i < j; ) {
        h = min(height[j], height[i]);
        w = j-i;
        area = h * w;
        maxArea = (area > maxArea) ? area : maxArea;
        (height[i] > height[j]) ? j-- : i++; 
    }
    return(maxArea);
}