Date and Time: Jul 8, 2024, 23:56 (EST)
Link: https://leetcode.com/problems/container-with-most-water/
You are given an integer array height of length n. There are n vertical lines drawn such that the two endpoints of the (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
-
n == height.length -
2 <= n <= 10^5 -
0 <= height[i] <= 10^4
This question is similar to [42. Trapping Rain Water]. Using the two pointers method, we calculate the area by min(height[l], height[r]) * (r - l), then we move the min(height[l], height[r]) because we want to get a greater area by taking larger height.
Apr 19, 2026 11:08:00 AM (PDT), Time Taken: 13m 59s
class Solution:
def maxArea(self, height: List[int]) -> int:
# Return the max area from two heights
# Two ptrs, maxLeft and maxRight, greedily maximize the area
# 1. Update maxLeft if maxLeft <= maxRight, and update the area (max(current area, currentMax))
# 2. Update maxRight, when maxLeft > maxRight, update maxRight
# 3. area = min(maxLeft, maxRight) * (r - l)
# TC: O(n), n=len(height), SC: O(1)
l, r = 0, len(height) - 1
area = 0
while l < r:
maxL, maxR = height[l], height[r]
area = max(area, min(maxL, maxR) * (r - l))
if maxL <= maxR:
l += 1
else:
r -= 1
return areaTime Complexity:
Space Complexity:
