Leetcode journey - Question 11 - Container With Most Water

Leetcode journey - Question 11 - Container With Most Water

Step by step explanation and approach of the problem with C++ code

ยท

2 min read

Problem:

Q11. Container With Most Water

You are given an integer array height of length n. There are n vertical lines are drawn such that the two endpoints of the ith line are (i, 0) and (i, height[i]).

Find two lines that together with the x-axis form a container, such that the container contains the most water.

Return the maximum amount of water a container can store.

Notice that you may not slant the container.

Example 1:

Input: height = [1,8,6,2,5,4,8,3,7]
Output: 49
Explanation: The above vertical lines are represented by array [1,8,6,2,5,4,8,3,7]. In this case, the max area of water (blue section) the container can contain is 49.

Example 2:

Input: height = [1,1]
Output: 1

Constraints:

  • n == height.length

  • 2 <= n <= 105

  • 0 <= height[i] <= 104

Solution:

Approach:

Two Pointer Approach: We will use two pointers, one at the beginning and one at the end of the array constituting the length of the lines. Further, we will maintain a variable maxarea to store the maximum area obtained till now. At every step, we will find out the area formed between them, update maxarea and move the pointer pointing to the shorter line towards the other end by one step.

Now, we can write the code:

Code:


#include <bits/stdc++.h>
using namespace std;

class Solution
{
public:
    int maxArea(vector<int> &height)
    {
        int i = 0, j = height.size() - 1;
        int maxArea = 0;
        while (i < j)
        {
            int area = min(height[i], height[j]) * (j - i);
            maxArea = max(maxArea, area);
            if (height[i] < height[j]) // we follow a greedy approach here and move the pointer pointing to the shorter line towards the other end by one step
            {
                i++;
            }
            else
            {
                j--;
            }
        }
        return maxArea;
    }
};

int main()
{
    Solution s;
    vector<int> height = {1, 8, 6, 2, 5, 4, 8, 3, 7};
    cout << s.maxArea(height) << endl;
    return 0;
}

Complexity Analysis:

Time Complexity: O(n)
Space Complexity: O(1)
Hope this helps!

  • If you have any questions, please leave a comment below. ๐Ÿ’ญ

  • If you like this article, please share it with your friends. ๐Ÿ’–

  • If you want to read more articles like this, please follow me.

Thank you for reading!


ย