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.
Show Similar Problems
we need at least linear time to go through the whole array. do search from both sides and compare max water each time. o(n) time o(1) space.
class Solution(object):
def maxArea(self, height):
"""
:type height: List[int]
:rtype: int
"""
left_index = 0
right_index = len(height) - 1
result = 0
while left_index < right_index:
water = min(height[left_index], height[right_index]) * (right_index - left_index)
if water > result:
result = water
if height[left_index] <= height[right_index]:
left_index += 1
else:
right_index -= 1
return result

本文介绍了一种利用双指针优化O(n)时间复杂度和O(1)空间复杂度解决容器最大容量问题的方法。通过从两端向中间遍历数组,不断更新最大容量值,最终找到最优解。

被折叠的 条评论
为什么被折叠?



