Skip to content

Latest commit

 

History

History
71 lines (50 loc) · 2.82 KB

11.Container_With_Most_Water(Medium).md

File metadata and controls

71 lines (50 loc) · 2.82 KB

11. Container With Most Water (Easy)

Date and Time: Jul 8, 2024, 23:56 (EST)

Link: https://leetcode.com/problems/container-with-most-water/


Question:

You are given an integer array height of length n. There are n vertical lines drawn such that the two endpoints of the $i^th$ 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.length

  • 2 <= n <= 10^5

  • 0 <= height[i] <= 10^4


KeyPoints:

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.


My Solution:

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: $O(n)$
Space Complexity: $O(1)$


CC BY-NC-SABY: credit must be given to the creatorNC: Only noncommercial uses of the work are permittedSA: Adaptations must be shared under the same terms