---
# System prepended metadata

title: '[Container with most water](https://leetcode.com/problems/container-with-most-water/)'
tags: [Leetcode, Two Pointers, Medium]

---

# [Container with most water](https://leetcode.com/problems/container-with-most-water/)
###### tags: `Leetcode`, `Medium`, `Two Pointers`

## Approach
* Initialize two pointers `left` and `right` to `0` and `len(height) - 1`
* Initialize *max_area = 0*
* Calculate *current_area* as follows:
```
current_area = min(height[left], height[right]) * (right - left)
```
* Calculate *max_area* as `max(max_area, current_area)`
* If left height is less than right height, increment left by 1
* If right height is less then left height, decrement right by 1


## Asymptotic Analysis
### Time Complexity: **O(N)**
### Space Complexity: **O(1)**

## Code
``` python
from typing import List


class ContainerWithMostWater:

    @staticmethod
    def max_area(height: List[int]) -> int:
        maximum_area = 0
        left, right = 0, len(height) - 1
        while left < right:
            area = min(height[left], height[right]) * (right - left)
            maximum_area = max(maximum_area, area)
            if height[left] < height[right]:
                left += 1
            else:
                right -= 1
        return maximum_area


heights = [1, 8, 6, 2, 5, 4, 8, 3, 7]
print(ContainerWithMostWater.max_area(heights))
```