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.
class Solution:
def maxArea(self, height: List[int]) -> int:
# l, r and move ptr has lower value
# area = (r-l) * min(height[r], height[l])
area = 0
l, r = 0, len(height)-1
while l < r:
area = max(area, (r-l) * min(height[l], height[r]))
if height[l] <= height[r]:
l += 1
else:
r -= 1
return area
Time Complexity:
Space Complexity: