0011-container-with-most-water¶
Try it on leetcode
Description¶
You are given an integer array height of length n. There are n vertical lines drawn such that the two endpoints of the ith line are (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
Constraints:
n == height.length2 <= n <= 1050 <= height[i] <= 104
Solution(Python)¶
class Solution:
def maxArea(self, height: List[int]) -> int:
# height = [1,8,6,2,5,4,8,3,7]
# 0 1 2 3 4 5 6 7 8
#
# width and height
# water = level * width
# level = min(left, right)
# width = right - left + 1
# maxArea
# width -> 0 .. n
# process smallest line left < right
# update maxArea
# dryrun
# i =0
# j = 8
# -> 0 < 8
# 1 < 7; level = 1; area = 1* 9
# i = 1
# maxArea = 9
# -> 1 < 8
# 8 > 7; level = 7; area = 7* 7 = 49
# j = 6
# maxArea = 49
#
# -> 1 < 6
# 8 < 8; level = 8; area= 8* 6
#
maxArea = 0
i = 0
j = len(height) - 1
while i < j:
if height[i] < height[j]:
level = height[i]
area = level * (j-i)
i += 1
else:
level = height[j]
area = level * (j-i)
j-=1
if area > maxArea:
maxArea = area
return maxArea