0011. Container With Most Water
Medium | Two Pointer | 648 ms (94.80%), 27.1 MB (88.44%)
Source: LeetCode - Container With Most Water GitHub: Solution / Performance
Given n
non-negative integers a1, a2, ..., an
, where each represents a point at coordinate (i, ai)
. n
vertical lines are drawn such that the two endpoints of the line i
is at (i, ai)
and (i, 0)
. Find two lines, which, together with the x-axis forms a container, such that the container contains the most water.
Notice that you may not slant the container.
Calculate the size of the container in each iteration, and move the pointer with SHORTER height until l >= r
.
class Solution:
def maxArea(self, height: List[int]) -> int:
# (base case)
if len( height ) == 2: return min( height )
# ==================================================
# Array + Two Pointer =
# ==================================================
# time : O(n)
# space : O(1)
area = 0
l, r = 0, len(height) - 1
# start from both-side (due to the LARGEST gap)
# move the pointer with SHORTER height
while r > l:
tmp = min(height[l], height[r]) * (r - l)
if tmp > area: area = tmp
if height[r] > height[l]: l += 1
else: r -= 1
return area
Last updated
Was this helpful?