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)
相关推荐
独断万古他化6 分钟前
【算法通关】位运算:位图、异或消消乐,高频算法题全解
算法·位运算
FoldWinCard11 分钟前
Python 第三次作业
java·服务器·python
你的冰西瓜16 分钟前
C++ STL算法——修改序列算法
开发语言·c++·算法·stl
大黄说说19 分钟前
彻底删除重复节点——LeetCode 82 题「有序链表去重 II」详解
算法·leetcode·链表
如意猴27 分钟前
003【高精度算法】加法/减法/乘法/除法
算法
仰泳的熊猫29 分钟前
题目1465:蓝桥杯基础练习VIP-回形取数
数据结构·c++·算法·蓝桥杯
0思必得032 分钟前
[Web自动化] Selenium浏览器复用
前端·python·selenium·自动化
Hag_2032 分钟前
LeetCode Hot100 15.三数之和
算法·leetcode·职场和发展
俩娃妈教编程37 分钟前
洛谷选题:P1307 [NOIP 2011 普及组] 数字反转
c++·算法
-小麦子-43 分钟前
Python 变量组包、解包及星号扩展机制详解
开发语言·python