力扣热题---盛最多水的容器

48 阅读1分钟

题目描述

image.png

解题思路

这是一道很经典的双指针题,想清楚指针移动的规律,这道中等题便迎刃而解,具体思路如下:

  • 定义一个头指针,一个尾指针,并计算当前指针状态的面积,面积公式为(end - start) * min(start, end)
  • 若当前面积大于最大面积,则更新最大面积
  • 比较头指针和尾指针大小,保留大的移动小的
  • 只要尾指针下标大于头指针,说明还存在未比较的区间,继续移动比较

代码如下

function maxArea(height: number[]): number {
    let max: number = 0;
    let start: number = 0;
    let end: number = height.length - 1;
    while(end > start){
        // 容器容积:(end - start) * min(start, end)
        let curArea = (end - start) * Math.min(height[start], height[end]);
        if(curArea > max) max = curArea;
        // 指针移动
        height[start] > height[end] ? end-- : start++;
    }
    return max;
};

提交效果

image.png