34. Container With Most Water
mediumAsked at VercelGiven a set of vertical lines, find the two that hold the most water between them. Vercel asks this for the two-pointer optimization — and because the 'always move the shorter side' invariant is the same shape as their bandwidth-allocation greedy.
By Alex Chen, Founder, InterviewChamp.AI · Last verified
Source citations
Public interview reports confirming this problem appears in Vercel loops.
- Glassdoor (2025-12)— Vercel onsite; the move-shorter-side proof is the bonus.
- Blind (2026-Q1)— Listed in Vercel runtime engineer screen.
Problem
You are given an integer array height of length n. There are n vertical lines drawn such that the two endpoints of the i-th 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.
Constraints
n == height.length2 <= n <= 10^50 <= height[i] <= 10^4
Examples
Example 1
height = [1,8,6,2,5,4,8,3,7]49Example 2
height = [1,1]1Approaches
1. Brute force all pairs
Try every pair (i, j); compute area = min(h[i], h[j]) * (j - i).
- Time
- O(n^2)
- Space
- O(1)
function maxArea(height) {
let best = 0;
for (let i = 0; i < height.length; i++) {
for (let j = i + 1; j < height.length; j++) {
best = Math.max(best, Math.min(height[i], height[j]) * (j - i));
}
}
return best;
}Tradeoff: Quadratic. Vercel will ask you to do better.
2. Two-pointer move-shorter (optimal)
Pointers at both ends. Compute area. Move the pointer at the SHORTER line inward — moving the taller can only decrease both width and possibly height.
- Time
- O(n)
- Space
- O(1)
function maxArea(height) {
let l = 0, r = height.length - 1;
let best = 0;
while (l < r) {
const h = Math.min(height[l], height[r]);
best = Math.max(best, h * (r - l));
if (height[l] < height[r]) l++;
else r--;
}
return best;
}Tradeoff: O(n) single pass. The 'move the shorter side' choice is provably correct: moving the taller can never increase the area because the bottleneck (shorter) stays the same.
Vercel-specific tips
Vercel grades the two-pointer AND the correctness proof. Bonus signal: explaining the 'move shorter' invariant out loud BEFORE coding — moving the taller pointer can't increase area because the min stays the same and the width decreases. If both heights are equal, either pointer works.
Common mistakes
- Moving both pointers — skips valid candidates.
- Moving the TALLER side — wrong, never finds the optimum.
- Computing area as max instead of min of the two heights — water levels at the shorter.
Follow-up questions
An interviewer at Vercel may pivot to one of these next:
- Trapping Rain Water (LC 42, hard) — related two-pointer pattern.
- Largest Rectangle in Histogram (LC 84, hard).
- What if there are >2 walls (3D container)?
Solve it now
Free. No sign-up. Python and JavaScript run instantly in your browser.
FAQ
Why does moving the shorter side work?
The area is bounded by min(left, right) * width. If you move the taller side inward, the min can only stay the same or decrease, AND the width decreases. So no chance of improvement. Moving the shorter MIGHT find a taller line and increase min enough to overcome the lost width.
What if heights are equal?
Either pointer works; the area is the same on both sides. Common convention is to move left.
Practice these live with InterviewChamp.AI
Drill Container With Most Water and other Vercel interview questions under real-loop conditions with instant feedback on your reasoning, complexity claims, and code.
Practice these live with InterviewChamp.AI →