11. 盛最多水的容器

在这里插入图片描述

题目描述

请添加图片描述

思路 and Swift 题解

经典的左右双指针问题,思路也非常简单。

首先,我们需要声明两个指针,也就是左指针left和右指针rightleft指向0,而right指向height.count - 1。之后,我们不断向中间移动这两个指针,如果height[left] > height[right],则移动右指针;否则移动左指针。这样做的原因是,每次盛水时具有“短板效应”,因此盛水最多的高度是height[left]height[right]当中的较小者,如果想要找到更大的高度,需要向中间移动指针。

在每次移动指针之前,记录一次答案,当前盛水的容积就是左右指针以及二者高度较小者构成的矩形的面积。

完整的 Swift 题解是:

class Solution {
    func maxArea(_ height: [Int]) -> Int {
        var left = 0, right = height.count - 1
        var ans = 0
        while left < right {
            ans = max(ans, min(height[left], height[right]) * (right - left))
            if height[left] > height[right] {
                right -= 1
            } else {
                left += 1
            }
        }
        return ans
    }
}
Logo

Agent 垂直技术社区,欢迎活跃、内容共建。

更多推荐