# Container With Most Water Problem

By
blackntt

# Problem

Cho một dãy số nguyên không âm a1, a2,..., an. Mỗi số nguyên với ở vị trí i sẽ biểu diễn một điểm ở biểu đồ có toạ độ (i, ai). Tương ứng với mảng số nguyên n phần tử sẽ vẽ tương ứng n cột giữa 2 điểm (i,0) và (i,ai). Yêu cầu tìm 2 cột mà hình chữ nhật tạo bởi 2 cột sau khi hợp với trục ox sẽ có khả năng chứa nhiều nước nhất và xuất ra lượng nước có thể chứa tối đa đó.

# Solution

# Giải pháp Brute force:

Độ phức tạp thời gian: 0(n^2) Độ phức tạp không gian: O(1)

int maxArea(vector &height)
{
    int maxWater = INT_MIN;
    for (int i = 0; i < height.size(); i++)
    {
        for (int j = i+1; j < height.size(); j++)
        {
            int water = min(height[i],height[j])*(j-i);
            maxWater = max(maxWater,water);
        }

    }
    return maxWater;
}

# Giải pháp two pointer:

int maxArea(vector &height)
{
    int maxWater = INT_MIN;
    int l = 0, r = height.size() - 1;
    while (l < r)
    {
        int water = min(height[l], height[r]) * (r - l);
        maxWater = max(maxWater, water);
        if(height[l] < height[r]){
            l++;
        }else{
            r--;
        }
    }
    return maxWater;
}