📖 Scenario: Imagine you have a row of vertical lines drawn on a flat surface. Each line has a height. You want to find two lines that, together with the surface, form a container that holds the most water.This is like choosing two walls to hold water between them. The water amount depends on the shorter wall and the distance between the walls.
🎯 Goal: You will write a program to find the maximum amount of water that can be held between two lines from a list of heights.
📋 What You'll Learn
Create a list called heights with the exact values: [1, 8, 6, 2, 5, 4, 8, 3, 7]
Create a variable called max_water and set it to 0
Use a while loop with variables left and right to find the maximum water container
Print the value of max_water
💡 Why This Matters
🌍 Real World
This problem models situations where you want to maximize capacity between boundaries, like designing containers, dams, or storage tanks.
💼 Career
Understanding two-pointer techniques and optimization is useful for coding interviews and real-world problems involving arrays and searching.
Progress0 / 4 steps
1
Create the list of heights
Create a list called heights with these exact values: [1, 8, 6, 2, 5, 4, 8, 3, 7]
DSA Python
Hint
Use square brackets [] to create the list and separate numbers with commas.
2
Initialize the maximum water variable
Create a variable called max_water and set it to 0
DSA Python
Hint
Use = to assign the value 0 to max_water.
3
Find the maximum water container
Use a while loop with variables left starting at 0 and right starting at len(heights) - 1. Inside the loop, calculate the water between heights[left] and heights[right]. Update max_water if the current water is greater. Move left forward if heights[left] is less than heights[right], else move right backward.
DSA Python
Hint
Use two pointers starting at the ends of the list and move them towards each other.
4
Print the maximum water
Print the value of max_water
DSA Python
Hint
Use print(max_water) to show the result.
Practice
(1/5)
1. What does the problem Container With Most Water ask you to find given an array of heights?
easy
A. The maximum area formed between two vertical lines and the x-axis
B. The minimum height in the array
C. The sum of all heights in the array
D. The number of lines taller than a given height
Solution
Step 1: Understand the problem statement
The problem asks to find two lines that together with the x-axis form a container holding the most water, which means the maximum area between two vertical lines.
Step 2: Identify what to calculate
We calculate the area as the width between two lines multiplied by the smaller height of the two lines.
Final Answer:
The maximum area formed between two vertical lines and the x-axis -> Option A
Quick Check:
Container with most water = maximum area [OK]
Hint: Look for max area between two heights, not sum or count [OK]
Common Mistakes:
Confusing area with sum of heights
Looking for minimum height only
Counting lines instead of calculating area
2. Which of the following is the correct way to initialize two pointers for the Container With Most Water problem in Python?
easy
A. left, right = 1, len(height)
B. left, right = 0, len(height) - 1
C. left = 0; right = len(height)
D. left, right = len(height), 0
Solution
Step 1: Understand pointer initialization
We start with two pointers at the edges of the array: left at 0 and right at the last index, which is length minus one.
Step 2: Check each option
left, right = 0, len(height) - 1 correctly sets left to 0 and right to len(height) - 1. Others either start at wrong indices or exceed array bounds.
Final Answer:
left, right = 0, len(height) - 1 -> Option B
Quick Check:
Start pointers at array ends = left, right = 0, len(height) - 1 [OK]
Hint: Start pointers at first and last index [OK]
Common Mistakes:
Setting right pointer to len(height) (out of range)
Starting left pointer at 1 instead of 0
Swapping left and right initialization
3. What is the output of the following Python code for the Container With Most Water problem?
def max_area(height):
left, right = 0, len(height) - 1
max_area = 0
while left < right:
width = right - left
area = min(height[left], height[right]) * width
max_area = max(max_area, area)
if height[left] < height[right]:
left += 1
else:
right -= 1
return max_area
print(max_area([1,8,6,2,5,4,8,3,7]))
medium
A. 49
B. 56
C. 64
D. 72
Solution
Step 1: Trace the two-pointer approach
Start with left=0 (height=1), right=8 (height=7), area = min(1,7)*8=8. Move left pointer since height[left]
Step 2: Continue moving pointers and update max_area
Next left=1 (8), right=8 (7), area = min(8,7)*7=49 (max_area updated). Then right moves left, area decreases. Max area remains 49.
Final Answer:
49 -> Option A
Quick Check:
Max area calculated = 49 [OK]
Hint: Move pointer with smaller height to find max area [OK]
Common Mistakes:
Calculating area with max height instead of min
Not updating max_area correctly
Moving wrong pointer in the loop
4. Find the error in the following code snippet for Container With Most Water and select the fix:
def max_area(height):
left, right = 0, len(height) - 1
max_area = 0
while left <= right:
width = right - left
area = min(height[left], height[right]) * width
max_area = max(max_area, area)
if height[left] < height[right]:
left += 1
else:
right -= 1
return max_area
medium
A. Increment both left and right pointers inside the loop
B. Initialize max_area to 1 instead of 0
C. Use max(height[left], height[right]) instead of min
D. Change while condition to 'left < right'
Solution
Step 1: Analyze the loop condition
The loop uses 'while left <= right', which allows left and right to be equal, causing width to be zero and area zero, which is unnecessary.
Step 2: Correct the loop condition
Changing to 'while left < right' ensures pointers do not cross or become equal, avoiding zero width and redundant calculations.
Final Answer:
Change while condition to 'left < right' -> Option D
Quick Check:
Loop until pointers cross, not equal [OK]
Hint: Use 'left < right' to avoid zero width area [OK]
Common Mistakes:
Using <= causes zero width calculation
Using max instead of min for height
Moving both pointers at once
5. Given the heights array [4,3,2,1,4], what is the maximum water container area and which pair of lines form it?
hard
A. 12, formed by lines at indices 1 and 4
B. 9, formed by lines at indices 0 and 3
C. 16, formed by lines at indices 0 and 4
D. 8, formed by lines at indices 2 and 4
Solution
Step 1: Calculate area between lines at indices 0 and 4