--- title: '11. Container With Most Water' description: 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]) icon: dot topics: - { name: "Array", slug: "array" } - { name: "Two Pointers", slug: "two-pointers" } - { name: "Greedy", slug: "greedy" } video: "UuiTKBwPgAo" sidebar: label: 'Container With Most Water' badge: 'Medium' --- ::::warning 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 <= 10^5` - `0 <= height[i] <= 10^4` ## Approach ```mermaid flowchart TD S(["maxArea(height)"]) --> I["res = 0, left = 0, right = len - 1"] I --> W{"left < right?"} W -- no --> E(["return res"]) W -- yes --> A["area = (right - left) * min(height[left], height[right])"] A --> M["res = max(res, area)"] M --> C{"height[left] < height[right]?"} C -- yes --> L["left += 1 — drop the shorter wall"] C -- no --> R["right -= 1 — drop the shorter wall"] L --> W R --> W ``` ## Solution ```py class Solution: def maxArea(self, height: List[int]) -> int: # noqa: F821 res = 0 left = 0 right = len(height) - 1 while left < right: area = (right - left) * min(height[left], height[right]) res = max(res, area) if height[left] < height[right]: left += 1 else: right -= 1 return res ```