先看要求 给你一个数组,数组里面的每一项代表水池的高度,求出两个高度之间盛水最高的面积
思路
1.循环数组,将每一种面积情况都求出来 选出面积最大的哪一项 (但性能很差)
2.双指针解法从左边和右边同时出发,谁的高度低谁优先向中间靠拢,直到重合
var maxArea = function (height = [1, 8, 9, 2, 5, 9, 8, 3, 9]) {
//左边下标用l表示 右边下标用r表示
let sum = 0; //面积
let max = 0; //最大面积
let l = 0; //左坐标
let r = height.length - 1; //右坐标
while (l < r) {
// l从左边第一位出发,r从右边第一位出发 ,每一次得到的的面积通过sum保存起来
sum = Math.min(height[l], height[r]) * (r - l);
//左边低l++ 右边低 r--
height[l] - height[r] < 0 ? l++ : r--;
//求出所有结果的最大值
max = Math.max(max, sum);
}
return max;
};