Leetcode journey - Question 11 - Container With Most Water
Step by step explanation and approach of the problem with C++ code
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.