【Swift】LeetCode 11. 盛最多水的容器
11. 盛最多水的容器
题目描述
思路 and Swift 题解
经典的左右双指针问题,思路也非常简单。
首先,我们需要声明两个指针,也就是左指针left
和右指针right
,left
指向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 - 1var ans = 0while left < right {ans = max(ans, min(height[left], height[right]) * (right - left))if height[left] > height[right] {right -= 1} else {left += 1}}return ans}
}