题目描述
解题思路
这是一道很经典的双指针题,想清楚指针移动的规律,这道中等题便迎刃而解,具体思路如下:
- 定义一个头指针,一个尾指针,并计算当前指针状态的面积,面积公式为(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;
};