leetcode_双指针 11. 盛最多水的容器

11. 盛最多水的容器

  • 给定一个长度为 n 的整数数组 height 。有 n 条垂线,第 i 条线的两个端点是 (i, 0) 和 (i, height[i]) 。

  • 找出其中的两条线,使得它们与 x 轴共同构成的容器可以容纳最多的水。

  • 返回容器可以储存的最大水量。

  • 说明:你不能倾斜容器。

1. 双重循环(记录用)

bash 复制代码
class Solution(object):
    def maxArea(self, height):
        """
        :type height: List[int]
        :rtype: int
        """
        res = []
        for left in range(len(height)):
            for right in range(left, len(height)):
                a = right - left
                b = min(height[left], height[right])
                s = a * b
                res.append(s)

        return max(res)
  • 时间复杂度: O(n^2)
  • 空间复杂度: O(n^2)

2. 双指针

  • 使用对向双指针来优化时间复杂度,一个指向数组的开头(left),另一个指向数组的末尾(right),当两个指针相遇时,循环停止。
bash 复制代码
class Solution(object):
    def maxArea(self, height):
        """
        :type height: List[int]
        :rtype: int
        """
        max_area = 0
        left, right = 0, len(height) - 1 # 对向双指针
        
        while left < right:
            current_area = (right - left) * min(height[left], height[right])  # 计算当前容器的容量
            max_area = max(max_area, current_area)  # 更新最大容量
            
            # 移动较短的那条线段的指针
            if height[left] < height[right]:
                left += 1
            else:
                right -= 1
                
        return max_area
  • 时间复杂度: O(n),只需遍历数组一次
  • 空间复杂度: O(1)
相关推荐
CodeBlossom7 分钟前
java加强 -stream流
java·windows·python
(・Д・)ノ14 分钟前
python打卡day28
开发语言·python
保利九里18 分钟前
java中的方法详解
java·开发语言·python
Y31742920 分钟前
Python Day25 学习
python·学习
江禾藜30 分钟前
Python爬虫之路(14)--playwright浏览器自动化
爬虫·python·自动化
灏瀚星空30 分钟前
Python标准库完全指南:os、sys与math模块详解与实战应用
开发语言·python·microsoft
坐吃山猪32 分钟前
Python-Flask-Dive
开发语言·python·flask
南部余额1 小时前
Python OOP核心技巧:如何正确选择实例方法、类方法和静态方法
开发语言·python
supingemail2 小时前
面试之 Java 新特性 一览表
java·面试·职场和发展
2303_Alpha2 小时前
深度学习入门:深度学习(完结)
人工智能·笔记·python·深度学习·神经网络·机器学习