每天学习一点算法 2026/04/23
题目:盛最多水的容器
给定一个长度为 n 的整数数组 height 。有 n 条垂线,第 i 条线的两个端点是 (i, 0) 和 (i, height[i]) 。
找出其中的两条线,使得它们与 x 轴共同构成的容器可以容纳最多的水。
返回容器可以储存的最大水量。
说明:你不能倾斜容器。
要想容纳最多的水,就要宽度足够的同时保证两侧的线足够长。
我们可以利用双指针来解这道题,首先两个指针指向 height 数组两端计算容量,如果要使容量变大只能移动较小的那一个指针,然后再次计算容量跟之前的容量作比较取较大值,这样一直移动到两个指针相遇这样就能得出最大容量。
typescript
function maxArea(height: number[]): number {
let left = 0, right = height.length - 1 // 初始化左右指针
let res = 0 // 结果
// 循环计算容量
while (left < right) {
const min = Math.min(height[left], height[right]) // 获取最短线
const current = (right - left) * min // 计算当前容量
res = Math.max(res, current) // 保存较大容量值
// 比较并移动指针
if (height[left] > height[right]) {
right--
} else {
left++
}
}
return res
};
题目来源:力扣(LeetCode)