盛最多水的容器

Leetcode 11

发表于 2023-05-08 05:35:47
更新于 2024-04-18 13:33:37
算法

力扣 11: 盛最多水的容器

前言

因为之前一篇题解提到了这道题,说到了一个移动较短的指针的一个结论,所以在这边给出实现,并讲一下为什么是这样的结论。

简单解释

我们这里采用双指针法,此时面积(盛水最多)是较短边乘以两个指针的差。

由于我们还需要搜索在两个指针的差变小的情况下,还是否存在面积变大的情况。

此时,我们不可能去移动较长的边,因为这样面积一定会变更小,所以我们需要每次移动较短的边,看看面积是否变大,直到双指针相遇即可。

实现

typescript
function maxArea(height: number[]): number {
  let max = 0;
  let left = 0;
  let right = height.length - 1;
  
  while (left < right) {
    max = Math.max(max, Math.min(height[left], height[right]) * (right - left));
  
    if (height[left] < height[right]) {
      left++
    } else {
      right--
    }
  }
  
  return max;
};