Container With Most Water
Question
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 line i is at (i, ai) and (i, 0). Find two lines, which together with x-axis forms a container, such that the container contains the most water.
Note: You may not slant the container and n is at least 2.
Tags
- Array
- Two Pointers
Thought
Use two pointers called left
and right
to start from two sides of the array and move to the middle.
Code
class Solution(object):
def maxArea(self, height):
"""
:type height: List[int]
:rtype: int
"""
left = 0
right = len(height) - 1
ans = 0
while left < right:
minHeight = min(height[left], height[right])
width = right - left
ans = max(ans, width * minHeight)
if height[left] < height[right]:
left += 1
elif height[left] > height[right]:
right -= 1
else:
left += 1
right -= 1
return ans