Leetcode 11
因为之前一篇题解提到了这道题,说到了一个移动较短的指针的一个结论,所以在这边给出实现,并讲一下为什么是这样的结论。
我们这里采用双指针法,此时面积(盛水最多)是较短边乘以两个指针的差。
由于我们还需要搜索在两个指针的差变小的情况下,还是否存在面积变大的情况。
此时,我们不可能去移动较长的边,因为这样面积一定会变更小,所以我们需要每次移动较短的边,看看面积是否变大,直到双指针相遇即可。
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;
};