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)
相关推荐
larance4 分钟前
修改jupyterlab 默认路径
python
ShiMetaPi10 分钟前
SAM(通用图像分割基础模型)丨基于BM1684X模型部署指南
人工智能·算法·ai·开源·bm1684x·算力盒子
前端小白在前进12 分钟前
力扣刷题:无重复字符的最长子串
算法·leetcode·职场和发展
小小的橙菜吖!14 分钟前
联合体的学习
学习·算法
NPE~24 分钟前
面试高频——分布式事务详解
分布式·面试·职场和发展·程序员·事务·分布式事务
别叫我->学废了->lol在线等31 分钟前
python单例模式下线程安全优化
python·安全·单例模式
西江6497634 分钟前
【个人博客系统—测试报告】
python·功能测试·jmeter·pycharm·postman
Xing_ke30935 分钟前
3D点云分割与检测(后续更新)
算法·3d点云
4311媒体网36 分钟前
C语言实现简单的二分查找算法
c语言·开发语言·算法
持续学习的程序员+137 分钟前
π RL(piRL)算法支持用强化学习方法训练π 0/π 0.5(pi0/pi0.5)
算法